From 9963ad1fb5cac3448802844e3501f4ae32434d9d Mon Sep 17 00:00:00 2001 From: Ino Murko Date: Thu, 1 Jun 2023 14:17:42 +0200 Subject: [PATCH] Release/v0.7.0 (#870) * Add exit dumper (#806) * Add exit dumper * Bump up go version * Fix go lint (cherry picked from commit b3a6b069e11cca7a1aeda1ed463d4d00c607e857) * Fix: gateway horizontal scrollbar. (#821) (cherry picked from commit b23ab2b363585974449596f1aa1be6500c091146) * added release-please (#823) * added release-please * Update release-please.yml * on push develop, default master (cherry picked from commit 4eb3c9c67a256c7e3ba3201f038541574398951e) * [AA] fix UserOpMethodHandler estimateUserOperationGas #752 (#756) * userop-estimateUserOperationGas * fix-integ-test * add-bundler-utils * rmlock * integration test * bundler-main * lock rm integration test debugging bundler-main * Update integration-tests/test/eth-l2/boba_aa_bundler.spec.ts Co-authored-by: Ino Murko * Update UserOpMethodHandler.ts * debugging * bundlerProvider * wallets * test fixed * alt * rm only * dep * bnb tests * Update boba_aa_bundler.spec.ts * feedback * failedop status status merge fix-mapping * resp * undo-package --------- Co-authored-by: Ino Murko (cherry picked from commit 4a310381c7900a61fd4dd6ebec323301815fbb14) * remove rinkeby|ropsten with goerli (#834) (cherry picked from commit 9a5991b9f2590490f28476f11f5ebbc68ba62594) * make hosted and AM names consistent (#839) (cherry picked from commit 8de8f2aee451c2dc27f728633501fd74aed6cc36) * message for swap (#825) (cherry picked from commit 2e7abf32574087deef93747ea4465db2d1382ffc) * Deploy audit contracts to testnets (#841) * Deploy audit contracts to Goerli * Deploy audit contracts to BSC testnet * Deploy audit contracts to Fuji * Deploy audit contracts to Opera testnet and bobabase (cherry picked from commit 77aaa9d8323db5f341c12f857f07cd708d5fd7a5) * [AA] test: add more paymaster ownership tests (#810) * test: add paymaster ownership tests * fix: alt-l1 tests * add gaslimit (cherry picked from commit 7ef780d49b652c2e1a9597072435440a004ea66b) * Fix : Alert for Boba Opera shutting down (#814) * fantom opera disable alert + textual change for moonbeam alert * updated test cases for notification banner * updated dates for the opera shutdown * updated test cases * updated test cases failure (cherry picked from commit f949b705c0de1e1799ac83125e4fcd938c802822) * Bump @openzeppelin/contracts-upgradeable (#840) (cherry picked from commit 92e16883eb0e38b4eb960ea7ad242e0259c09e12) * install yq (#844) build all side containers release building containers (cherry picked from commit 1c17ac3ba03b6e0bb29a0a54a0db18ddd5cb7acb) * Bump undici from 5.14.0 to 5.22.1 (#850) Bumps [undici](https://github.com/nodejs/undici) from 5.14.0 to 5.22.1. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v5.14.0...v5.22.1) --- updated-dependencies: - dependency-name: undici dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit d443e8310b54add12760dad69a2990f040efd998) * Bump cookiejar from 2.1.3 to 2.1.4 (#848) Bumps [cookiejar](https://github.com/bmeck/node-cookiejar) from 2.1.3 to 2.1.4. - [Commits](https://github.com/bmeck/node-cookiejar/commits) --- updated-dependencies: - dependency-name: cookiejar dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 320061255f101899ea39439642a24e9ff9a42e51) * Add Snyk, Dependabot, Secretfinder (#838) * Create dependabot.yml * Update dependabot.yml * snyk * secret-detect * build(detect-secrets): Commit the newly-generated .secrets.baseline file * error on * fix-vulnerabilities * snyk * integ * Update package.json * Update package.json * Update package.json * Update snyk.yml * Update secret-detect.yml * Update .github/dependabot.yml Co-authored-by: Ino Murko --------- Co-authored-by: wsdt Co-authored-by: Ino Murko (cherry picked from commit 19b236743bbc1515f7187a7849dad4c8e4749102) * Fix dependabot (reviewers) intendation (#853) (cherry picked from commit 3e84e299cde3d869b79fa7a0d7fb5614127fcd04) * Revert "Fix dependabot (reviewers) intendation" (#854) * Revert "Fix dependabot (reviewers) intendation (#853)" This reverts commit 3e84e299cde3d869b79fa7a0d7fb5614127fcd04. * Update dependabot.yml --------- Co-authored-by: Riedl Kevin, Bsc (cherry picked from commit 276eb7178617b7a8207317cb67b9ec92c987f8ac) * Bump @types/chai from 4.3.4 to 4.3.5 (#859) Bumps [@types/chai](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chai) from 4.3.4 to 4.3.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chai) --- updated-dependencies: - dependency-name: "@types/chai" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit f3f78df222fb0ba9c436513e4e61220f2390afc4) * Bump typedoc from 0.22.18 to 0.24.7 (#858) Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.22.18 to 0.24.7. - [Release notes](https://github.com/TypeStrong/TypeDoc/releases) - [Changelog](https://github.com/TypeStrong/typedoc/blob/master/CHANGELOG.md) - [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.22.18...v0.24.7) --- updated-dependencies: - dependency-name: typedoc dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 0b8938eafb5b6c9eb512347a147b11eac641a9e0) * Bump prettier and @types/prettier (#857) Bumps [prettier](https://github.com/prettier/prettier) and [@types/prettier](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/prettier). These dependencies needed to be updated together. Updates `prettier` from 2.8.2 to 2.8.8 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.8.2...2.8.8) Updates `@types/prettier` from 2.2.1 to 2.7.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/prettier) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: "@types/prettier" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit ee80d8cf0314eb652706e46ef1020a13a8b78f0b) * Bump @emotion/react from 11.10.6 to 11.11.0 (#856) Bumps [@emotion/react](https://github.com/emotion-js/emotion) from 11.10.6 to 11.11.0. - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.10.6...@emotion/react@11.11.0) --- updated-dependencies: - dependency-name: "@emotion/react" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 2b559d386af52638e18b83062211b792a286e409) * Bump http-cache-semantics from 4.1.0 to 4.1.1 (#849) Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1. - [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: http-cache-semantics dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 2d84ebbb7ed7e1fee6dab7251212ee3dc1444e8b) * Verifier fixes (#835) * Pin web3.py dependency to last working version (v6.x has incompatible changes) Changes to be committed: modified: boba_community/fraud-detector/docker/Dockerfile.fraud-detector * Update the verifier docker-compose.yml structure to match the replica (../boba-node/docker-compose.yml). Changes to be committed: modified: docker-compose.yml * Move addresses.json file (mainnet) Changes to be committed: renamed: addresses.json -> addresses/mainnet/addresses.json * Avoid expensive queries to AddressManager contract by returning values from the configured addressList. Assumes that contract addresses do not change after deployment (within the relevant range of blocks). Changes to be committed: modified: packages/data-transport-layer/src/services/l1-ingestion/service.ts modified: packages/data-transport-layer/src/services/main/service.ts * Add Goerli files. Changes to be committed: new file: docker-compose-goerli.yml new file: state-dumps/goerli/addresses.json new file: state-dumps/goerli/boba-addr.json new file: state-dumps/goerli/state-dump.latest.json renamed: addresses/mainnet/addresses.json -> state-dumps/mainnet/addresses.json * Add Verifier / Fraud Detector support for the legacy mainnet prior to the regenesis. Changes to be committed: new file: docker-compose-v1_mainnet.yml modified: docker-compose.yml modified: fraud-detector.py new file: state-dumps/v1_mainnet/addresses.json new file: state-dumps/v1_mainnet/state-dump.latest.json * Update documentation; fix V1 contract names. Changes to be committed: modified: README.md modified: state-dumps/v1_mainnet/addresses.json * Fixes. Changes to be committed: modified: README.md modified: docker-compose-goerli.yml modified: docker-compose.yml --------- Co-authored-by: Ino Murko (cherry picked from commit 10f0e3a05347cf922bb21d3c8a574db16491c9e3) * Add more information to Bundler SDK release & versioning (#813) * fix npm versioning * branch * changed-refspec * push * define-branch * Bump Bundler SDK version * path-filters define-branch push changed-refspec branch fix npm versioning * package metadata, docs finish actions trigger-change trigger-change fix-test-branch switch-actions * yarn.lcok * trigger * Bump Bundler SDK version * fix-lock * fix-lock * works test ghtok dev version test trigger trigger trigger trigger has-updated * Update .github/workflows/aa-bundler-sdk-pr.yml Co-authored-by: Ino Murko * Update aa-bundler-sdk-pr.yml * Update aa-bundler-sdk.yml * open a PR * update tags * check if packages *was* updated * set base branch for new PR * use GH_PERSONAL_ACCESS_TOKEN instead of GITHUB_TOKEN * use yarn instead of npm * use yarn with jq * use action-bump-semver * run only on merge to develop when theres a change --------- Co-authored-by: GitHub Actions Bot <> Co-authored-by: Ino Murko Co-authored-by: Ino Murko <2582555+InoMurko@users.noreply.github.com> (cherry picked from commit 2f6f8fe60df62f59c782e1eb0b05d422c78c0125) * Github: CI/CD for gateway deployment to staging. (#824) * testing tag version * update yml * prepare the github workflow for deploy to stage & cleanup unused workflow * env params value * cleanup keys & script from package.json (cherry picked from commit fc0dee733115ef2822177e450461f01a0bdb42b6) * Gateway CI/CD : workflow fixes (#863) * workflow fixes * removed linting, added working directory while sync with s3 (cherry picked from commit 00c586eeff01947b768181223b322bc45a478ece) * Update SDK version (#862) Co-authored-by: InoMurko Co-authored-by: Riedl Kevin, Bsc (cherry picked from commit 3ef009a05aed0fa5d27759da34c128c1a9f250da) * fix: bundler relies on eth_getLogs with indefinite range (#855) * fix: workaround for bundler eth_getLogs range * remove unused deps * fix: rename to l2Offset * add configurable logsChunckSize --------- Co-authored-by: Riedl Kevin, Bsc (cherry picked from commit 13a1222e6ae0700183fd33ac013e262620129538) --------- Co-authored-by: Boyuan-Chen <46272347+Boyuan-Chen@users.noreply.github.com> Co-authored-by: Sahil K <86316370+sk-enya@users.noreply.github.com> Co-authored-by: Riedl Kevin, Bsc Co-authored-by: Souradeep Das Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Michael Montour Co-authored-by: bobabot-enya-ai <101345210+bobabot-enya-ai@users.noreply.github.com> --- .github/dependabot.yml | 36 + .github/workflows/aa-bundler-sdk-pr.yml | 105 +- .github/workflows/aa-bundler-sdk.yml | 13 +- .github/workflows/boba-publish-develop.yml | 13 +- .github/workflows/boba-publish-master.yml | 11 +- .github/workflows/gateway-deploy-stage.yml | 57 + .github/workflows/geth.yml | 4 +- .github/workflows/release-please.yml | 15 + .github/workflows/secret-detect.yml | 19 + .github/workflows/snyk.yml | 21 + .gitignore | 1 + .secrets.baseline | 112 + boba_community/boba-node/.env.example | 6 +- .../state-dumps/bobabase/boba-addr.json | 75 +- .../state-dumps/bobabnbtestnet/boba-addr.json | 45 +- .../state-dumps/bobafuji/boba-addr.json | 44 + .../bobaopera-testnet/boba-addr.json | 47 +- .../state-dumps/goerli/boba-addr.json | 20 +- boba_community/boba-relayer/.env.example | 4 +- boba_community/boba-relayer/README.md | 4 +- boba_community/fraud-detector/README.md | 42 +- .../fraud-detector/docker-compose-goerli.yml | 100 + .../docker-compose-v1_mainnet.yml | 100 + .../fraud-detector/docker-compose.yml | 72 +- .../docker/Dockerfile.fraud-detector | 2 +- .../fraud-detector/fraud-detector.py | 8 +- .../state-dumps/goerli/addresses.json | 16 + .../state-dumps/goerli/boba-addr.json | 69 + .../state-dumps/goerli/state-dump.latest.json | 171 + .../{ => state-dumps/mainnet}/addresses.json | 0 .../mainnet}/state-dump.latest.json | 0 .../state-dumps/v1_mainnet/addresses.json | 11 + .../v1_mainnet/state-dump.latest.json | 3542 +++++++++++++++++ boba_community/hc-captcha-faucet/README.md | 24 +- .../packages/contracts/package.json | 2 +- .../packages/gate/package.json | 2 +- boba_community/hc-captcha-faucet/yarn.lock | 225 +- boba_community/hc-kyc/hardhat.config.ts | 6 +- boba_community/hc-kyc/package.json | 2 +- boba_community/hc-monsters/hardhat.config.ts | 2 +- boba_community/hc-monsters/package.json | 2 +- .../packages/dapp-contracts/hardhat.config.ts | 8 - boba_examples/README.md | 10 +- boba_examples/boba-fee/.env.example | 10 +- boba_examples/boba-fee/README.md | 20 +- boba_examples/boba-straw/.env.example | 10 +- boba_examples/boba-straw/README.md | 6 +- .../hardhat-simple-storage/.env.example | 1 - .../hardhat-simple-storage/package.json | 4 +- boba_examples/init-fund-l2/README.md | 8 +- boba_examples/nft_bridging/.env.example | 8 +- boba_examples/nft_bridging/package.json | 2 +- .../SampleERC721.json | 0 ...kStart-rinkeby.js => quickStart-goerli.js} | 2 +- boba_examples/truffle-erc20/package.json | 6 +- .../turing-complex-types/.env.example | 2 +- boba_examples/turing-complex-types/README.md | 8 +- .../turing-complex-types/package.json | 2 +- boba_examples/turing-hello-world/.env.example | 2 +- boba_examples/turing-hello-world/package.json | 2 +- boba_examples/turing-lending/.env.example | 2 +- boba_examples/turing-lending/package.json | 2 +- boba_examples/turing-nft-random/.env.example | 2 +- boba_examples/turing-nft-random/package.json | 2 +- boba_examples/turing-stable-swap/.env.example | 2 +- boba_examples/turing-stable-swap/package.json | 2 +- boba_examples/turing-twitter-pay/package.json | 2 +- faq.md | 2 +- integration-tests/README.md | 25 +- integration-tests/package.json | 14 +- .../test/alt-l2/boba_aa_alt_fee_token.spec.ts | 24 +- .../test/alt-l2/boba_aa_bundler.spec.ts | 103 + .../test/alt-l2/boba_aa_wallet.spec.ts | 2 +- .../test/alt-l2/erc1155_bridge.spec.ts | 5 +- .../test/eth-l2/boba-api.spec.ts | 2 +- .../test/eth-l2/boba_aa_bundler.spec.ts | 103 + .../test/eth-l2/boba_aa_fee_alt_token.spec.ts | 2 +- .../test/eth-l2/boba_aa_fee_boba.spec.ts | 24 +- .../eth-l2/boba_aa_sponsoring_fee.spec.ts | 2 +- .../test/eth-l2/boba_aa_wallet.spec.ts | 2 +- .../test/eth-l2/pool_dao_actions.spec.ts | 4 +- l2geth/README.md | 6 +- l2geth/cmd/clef/tutorial.md | 26 +- l2geth/core/vm/evm.go | 18 + l2geth/rollup/dump/constants.go | 1 + l2geth/statedumper/dumper.go | 82 + l2geth/statedumper/dumper_test.go | 36 + ops/docker-compose-side.yml | 1 - ops/docker/Dockerfile.geth | 4 +- ops/scripts/integration-tests.sh | 2 +- ops_boba/api/watcher-api/README.md | 14 +- ops_boba/api/watcher-api/deploy.sh | 12 +- .../deploy/5-dump-addresses.ts | 2 +- .../boba_bnb_testnet/addresses.json | 2 +- .../deployments/boba_goerli/addresses.json | 2 +- .../boba/account-abstraction/package.json | 4 +- packages/boba/bundler/hardhat.config.ts | 21 +- packages/boba/bundler/package.json | 1 - packages/boba/bundler/src/BundlerConfig.ts | 6 + packages/boba/bundler/src/BundlerServer.ts | 16 +- .../boba/bundler/src/UserOpMethodHandler.ts | 37 +- .../boba/bundler/src/modules/EventsManager.ts | 32 +- .../boba/bundler/src/modules/initServer.ts | 2 +- packages/boba/bundler/src/runBundler.ts | 2 + .../bundler/test/UserOpMethodHandler.test.ts | 3 +- packages/boba/bundler_sdk/README.md | 4 + packages/boba/bundler_sdk/package.json | 31 +- packages/boba/contracts/.env.example | 8 +- packages/boba/contracts/hardhat.config.ts | 48 + packages/boba/gateway/.env.example | 4 + packages/boba/gateway/package.json | 2 - .../boba/gateway/src/actions/createAction.js | 3 +- .../notificationBanner/bannerConfig.ts | 17 + .../components/notificationBanner/index.tsx | 52 +- .../tests/__snapshots__/index.test.tsx.snap | 36 +- .../notificationBanner/tests/index.test.tsx | 11 +- .../boba/gateway/src/containers/home/Home.js | 12 +- .../modals/deposit/steps/BridgeAlert.tsx | 28 + .../modals/deposit/steps/InputStep.js | 8 +- .../modals/deposit/steps/InputStepFast.js | 6 +- .../modals/deposit/steps/alertConfig.ts | 10 + .../modals/deposit/steps/bobaBeamAlert.tsx | 32 - .../__snapshots__/bobaBeamAlert.test.tsx.snap | 58 +- .../steps/tests/bobaBeamAlert.test.tsx | 35 +- .../gateway/src/containers/wallet/Wallet.js | 23 +- packages/boba/gateway/src/util/constant.ts | 2 + .../src/util/network/config/ethereum.js | 2 + packages/boba/register/README.md | 2 +- ...1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json | 16 +- ...8de95b85212BC348452e91e0e74c17cf37c79.json | 16 +- ...0bF3a1411AC973A606f90B2d1ee0840e5979B.json | 16 +- ...d9f501149D3FDd703cC10c567F416B7F0af8b.json | 16 +- ...9c8FF8F0B6a0763a3030540c21aFC721A9148.json | 17 +- packages/boba/register/bin/deploy.ts | 2 +- .../boba/subgraph/L1/bridges/package.json | 6 +- packages/boba/subgraph/L1/bridges/truffle.js | 4 +- .../L2/config/{rinkeby.json => goerli.json} | 0 packages/boba/subgraph/L2/package.json | 6 +- packages/boba/subgraph/L2/truffle.js | 4 +- packages/boba/subgraph/README.md | 28 +- packages/boba/turing/README.md | 14 +- packages/boba/turing/hardhat.config.ts | 6 +- .../deploy/013-BobaDao.deploy.ts | 8 +- .../pool_dao_actions.spec.ts | 4 +- .../src/services/l1-ingestion/service.ts | 11 +- .../src/services/main/service.ts | 6 +- packages/sdk/package.json | 2 +- specs/package.json | 2 +- yarn.lock | 322 +- 149 files changed, 6005 insertions(+), 756 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/gateway-deploy-stage.yml create mode 100644 .github/workflows/release-please.yml create mode 100644 .github/workflows/secret-detect.yml create mode 100644 .github/workflows/snyk.yml create mode 100644 .secrets.baseline create mode 100644 boba_community/boba-node/state-dumps/bobafuji/boba-addr.json create mode 100644 boba_community/fraud-detector/docker-compose-goerli.yml create mode 100644 boba_community/fraud-detector/docker-compose-v1_mainnet.yml create mode 100644 boba_community/fraud-detector/state-dumps/goerli/addresses.json create mode 100644 boba_community/fraud-detector/state-dumps/goerli/boba-addr.json create mode 100644 boba_community/fraud-detector/state-dumps/goerli/state-dump.latest.json rename boba_community/fraud-detector/{ => state-dumps/mainnet}/addresses.json (100%) rename boba_community/fraud-detector/{ => state-dumps/mainnet}/state-dump.latest.json (100%) create mode 100644 boba_community/fraud-detector/state-dumps/v1_mainnet/addresses.json create mode 100644 boba_community/fraud-detector/state-dumps/v1_mainnet/state-dump.latest.json rename boba_examples/nft_bridging/{quickStart-Rinkeby => quickStart-Goerli}/SampleERC721.json (100%) rename boba_examples/nft_bridging/src/{quickStart-rinkeby.js => quickStart-goerli.js} (98%) create mode 100644 integration-tests/test/alt-l2/boba_aa_bundler.spec.ts create mode 100644 integration-tests/test/eth-l2/boba_aa_bundler.spec.ts create mode 100644 l2geth/statedumper/dumper.go create mode 100644 l2geth/statedumper/dumper_test.go create mode 100644 packages/boba/gateway/src/components/notificationBanner/bannerConfig.ts create mode 100644 packages/boba/gateway/src/containers/modals/deposit/steps/BridgeAlert.tsx create mode 100644 packages/boba/gateway/src/containers/modals/deposit/steps/alertConfig.ts delete mode 100644 packages/boba/gateway/src/containers/modals/deposit/steps/bobaBeamAlert.tsx rename packages/boba/subgraph/L2/config/{rinkeby.json => goerli.json} (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..e892992d46 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,36 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + reviewers: + - "souradeep-das" + - "wsdt" + - "Boyuan-Chen" + - "InoMurko" + - package-ecosystem: "docker" # See documentation for possible values + directory: "/ops" # Location of package manifests + schedule: + interval: "weekly" + reviewers: + - "souradeep-das" + - "wsdt" + - "Boyuan-Chen" + - "InoMurko" + - package-ecosystem: "github-actions" + # Workflow files stored in the + # default location of `.github/workflows` + directory: "/" + schedule: + interval: "weekly" + reviewers: + - "souradeep-das" + - "wsdt" + - "Boyuan-Chen" + - "InoMurko" diff --git a/.github/workflows/aa-bundler-sdk-pr.yml b/.github/workflows/aa-bundler-sdk-pr.yml index bbfa175bcd..2696df7d57 100644 --- a/.github/workflows/aa-bundler-sdk-pr.yml +++ b/.github/workflows/aa-bundler-sdk-pr.yml @@ -1,26 +1,91 @@ -name: Will trigger release of AA-Bundler to NPM (PR comment) +name: Will trigger version bump of AA-Bundler for NPM + on: - pull_request: + push: + branches: + - develop + paths: + # only on change + - 'packages/boba/bundler_sdk/**/*' + - 'packages/boba/bundler_utils/**/*' + - 'packages/boba/account-abstraction/**/*' + +permissions: + contents: write jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: dorny/paths-filter@v2 - id: filter - with: - filters: | - bundler_sdk: - - 'packages/boba/bundler_sdk/**/*' - - 'packages/boba/bundler_utils/**/*' - - name: PR commenter - if: steps.filter.outputs.bundler_sdk == 'true' - uses: mshick/add-pr-comment@v2 - with: - message: | - ⚠️ **This PR triggers a minor release of the Bundler SDK** (Account Abstraction) to NPM as you made changes in the corresponding `bundler_sdk` directory. - - Please make sure this is intentional. - - The package that is going to be updated is `@bobanetwork/bundler_sdk`. + - uses: actions/checkout@v3 + + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + bundler_sdk: + - 'packages/boba/account-abstraction/**/*' + - 'packages/boba/bundler_sdk/**/*' + - 'packages/boba/bundler_utils/**/*' + + - name: PR commenter + if: steps.filter.outputs.bundler_sdk == 'true' + uses: mshick/add-pr-comment@v2 + with: + message: | + ⚠️ **This PR triggers a minor release of the Bundler SDK** (Account Abstraction) to NPM as you made changes in the corresponding `bundler_sdk` directory. + + Please make sure this is intentional. + + The package that is going to be updated is `@bobanetwork/bundler_sdk`. + + - uses: MontyD/package-json-updated-action@1.0.1 + id: version-updated + with: + path: packages/boba/bundler_sdk/package.json + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - id: get-latest-tag + working-directory: ./packages/boba/bundler_sdk + run: echo "sdk_current_version=$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT + + - uses: actions-ecosystem/action-bump-semver@v1 + id: bump-semver + with: + current_version: ${{ steps.get-latest-tag.outputs.sdk_current_version }} + level: patch + + - name: Increment patch version + if: steps.version-updated.outputs.has-updated == 'true' + working-directory: ./packages/boba/bundler_sdk + run: yarn version patch --no-commit-hooks --no-git-tag-version --new-version ${{ steps.bump-semver.outputs.new_version }} + + - name: Create Pull Request + if: steps.version-updated.outputs.has-updated == 'true' + id: cpr + uses: peter-evans/create-pull-request@v5 + with: + base: develop + token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} + commit-message: Update SDK version + committer: GitHub + author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> + signoff: false + branch: automated/bump_bundler_sdk_version + delete-branch: true + title: 'Bump Bundler SDK version' + body: | + Bump Bundler SDK version + labels: | + automated pr + bundler + bundler sdk + account-abstraction + reviewers: | + souradeep-das + wsdt + Boyuan-Chen + inomurko + draft: false + diff --git a/.github/workflows/aa-bundler-sdk.yml b/.github/workflows/aa-bundler-sdk.yml index d752e9b8e5..e2c6fbf3fd 100644 --- a/.github/workflows/aa-bundler-sdk.yml +++ b/.github/workflows/aa-bundler-sdk.yml @@ -1,12 +1,8 @@ name: Publish AA-Bundler to NPM on: push: - branches: - - develop - paths: - # only on change - - 'packages/boba/bundler_sdk/**/*' - - 'packages/boba/bundler_utils/**/*' + tags: + - '*' jobs: build: @@ -19,11 +15,10 @@ jobs: with: node-version: '16.x' registry-url: 'https://registry.npmjs.org' + - name: Install dependencies and build 🔧 run: yarn install --frozen-lockfile --legacy-peer-deps && yarn run build - - name: Increment patch version - working-directory: ./packages/boba/bundler_sdk - run: npm version minor --legacy-peer-deps + - name: Publish package on NPM 📦 working-directory: ./packages/boba/bundler_sdk run: npm publish --access public diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index d363ccc861..21dcab91dd 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -51,7 +51,10 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - uses: actions/checkout@v2 - - uses: chrisdickinson/setup-yq@latest + + - name: yq - portable yaml processor + uses: mikefarah/yq@v4.34.1 + - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" @@ -109,13 +112,15 @@ jobs: - name: Build the side services working-directory: ./ops - run: docker-compose -f docker-compose.yml -f docker-compose-side.yml build -- $(yq '(.services | keys)[]' docker-compose-side.yml | tr '\n' ' ') + run: | + #standard yq setup: $(yq '(.services | keys)[]' docker-compose-side.yml | tr '\n' ' ') + docker-compose -f docker-compose.yml -f docker-compose-side.yml build -- $(yq eval '(.services | keys)[]' < ./docker-compose-side.yml | tr '\n' ' ') - name: Print images working-directory: ./ run: docker images - - name: Rename and retag the optimism images + - name: Rename and retag images working-directory: ./ops run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do @@ -123,7 +128,7 @@ jobs: done docker images - - name: Rename and retag the optimism images + - name: Push images working-directory: ./ops run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do diff --git a/.github/workflows/boba-publish-master.yml b/.github/workflows/boba-publish-master.yml index e40e9093ba..d606b06947 100644 --- a/.github/workflows/boba-publish-master.yml +++ b/.github/workflows/boba-publish-master.yml @@ -60,7 +60,8 @@ jobs: - uses: actions/checkout@v2 - - uses: chrisdickinson/setup-yq@latest + - name: yq - portable yaml processor + uses: mikefarah/yq@v4.34.1 - name: Get yarn cache directory path id: yarn-cache-dir-path @@ -126,13 +127,15 @@ jobs: - name: Build the side services working-directory: ./ops - run: docker-compose -f docker-compose.yml -f docker-compose-side.yml build -- $(yq '(.services | keys)[]' docker-compose-side.yml | tr '\n' ' ') + run: | + #standard yq setup: $(yq '(.services | keys)[]' docker-compose-side.yml | tr '\n' ' ') + docker-compose -f docker-compose.yml -f docker-compose-side.yml build -- $(yq eval '(.services | keys)[]' < ./docker-compose-side.yml | tr '\n' ' ') - name: Print images working-directory: ./ run: docker images - - name: Rename and retag the Optimism images + - name: Rename and retag images working-directory: ./ops run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do @@ -140,7 +143,7 @@ jobs: done docker images - - name: Rename and retag the optimism images + - name: Push images working-directory: ./ops run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do diff --git a/.github/workflows/gateway-deploy-stage.yml b/.github/workflows/gateway-deploy-stage.yml new file mode 100644 index 0000000000..03fc3b5ed8 --- /dev/null +++ b/.github/workflows/gateway-deploy-stage.yml @@ -0,0 +1,57 @@ +name: Deploy gateway to stage + +on: + push: + branches: + - 'develop' + paths: + # when only on change + - 'packages/boba/gateway/**/*' +env: + STAGING_BUCKET_NAME: ${{ secrets.STAGING_BUCKET_NAME }} + REACT_APP_SPEED_CHECK: ${{ secrets.SPEED_CHECK }} + REACT_APP_INFURA_ID: ${{ secrets.INFURA_ID }} + REACT_APP_GA4_MEASUREMENT_ID: ${{ secrets.GA4_MEASUREMENT_ID }} + REACT_APP_SENTRY_DSN: ${{ secrets.SENTRY_DSN_MAINNET }} + +jobs: + build-gateway: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: '16.x' + - name: Install dependencies at root + run: yarn install + - name: Build in root + run: yarn build + - name: Latest tag + id: tag + run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + - name: Print current tag + run: echo ${{ steps.tag.outputs.VERSION }} + - name: Prepare gateway build for stage + working-directory: ./packages/boba/gateway + run: yarn build:prod + env: + SKIP_PREFLIGHT_CHECK: true + REACT_APP_POLL_INTERVAL: 15000 + REACT_APP_STATUS: 'normal' + REACT_APP_DISABLE_VE_DAO: 1 + REACT_APP_BOBA_BEAM_STATUS: 1 + REACT_APP_WALLET_VERSION: ${{ steps.tag.outputs.VERSION }} + REACT_APP_SPEED_CHECK: ${{ env.REACT_APP_SPEED_CHECK }} + REACT_APP_INFURA_ID: ${{ env.REACT_APP_INFURA_ID }} + REACT_APP_GA4_MEASUREMENT_ID: ${{ env.REACT_APP_GA4_MEASUREMENT_ID }} + REACT_APP_SENTRY_DSN: ${{ env.REACT_APP_SENTRY_DSN }} + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: ${{ secrets.AWS_ROLE }} + aws-region: ${{ secrets.AWS_REGION }} + - name: 'Deploy to S3:Staging' + working-directory: ./packages/boba/gateway + run: aws s3 rm s3://${{ env.STAGING_BUCKET_NAME }} --recursive && aws s3 sync build s3://${{ env.STAGING_BUCKET_NAME }} && aws s3 cp s3://${{ env.STAGING_BUCKET_NAME }}/index.html s3://${{ env.STAGING_BUCKET_NAME }}/index.html --metadata-directive REPLACE --cache-control max-age=0 --content-type text/html diff --git a/.github/workflows/geth.yml b/.github/workflows/geth.yml index 87f7399121..e04d5a51e3 100644 --- a/.github/workflows/geth.yml +++ b/.github/workflows/geth.yml @@ -32,7 +32,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: 1.15.x + go-version: 1.16.x - name: Checkout code uses: actions/checkout@v2 @@ -47,7 +47,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: 1.15.x + go-version: 1.18.x - name: Checkout code uses: actions/checkout@v2 diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000000..2d9352160c --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,15 @@ +# .github/workflows/release-please.yml +name: release-please +on: + push: + branches: + - develop +jobs: + release-please: + permissions: write-all + runs-on: ubuntu-latest + steps: + - uses: google-github-actions/release-please-action@v3 + with: + release-type: terraform-module # Multiple release types are supported + default-branch: master diff --git a/.github/workflows/secret-detect.yml b/.github/workflows/secret-detect.yml new file mode 100644 index 0000000000..a1775ece54 --- /dev/null +++ b/.github/workflows/secret-detect.yml @@ -0,0 +1,19 @@ +# This runs Yelp's 'detect-secrets': https://github.com/Yelp/detect-secrets/blob/master/README.md +name: Scan Code for Secrets +on: + pull_request: + branches: + - develop # develop instead of master to reduce time-to-discover + +jobs: + check-for-secrets: + runs-on: 'ubuntu-latest' + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Run Yelp's detect-secrets + uses: RobertFischer/detect-secrets-action@v2.0.0 + - name: Commit back .secrets.baseline (if it was missing) + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "build(detect-secrets): Commit the newly-generated .secrets.baseline file" diff --git a/.github/workflows/snyk.yml b/.github/workflows/snyk.yml new file mode 100644 index 0000000000..6d2585177f --- /dev/null +++ b/.github/workflows/snyk.yml @@ -0,0 +1,21 @@ +name: Snyk +on: + push: + branches: + - develop +jobs: + security: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Node - Run Snyk to check for vulnerabilities + uses: snyk/actions/node@master + continue-on-error: true + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: + args: --sarif-file-output=snyk.sarif + - name: Upload result to GitHub Code Scanning + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: snyk.sarif diff --git a/.gitignore b/.gitignore index 9ec4257d90..eef5df21c6 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ packages/regenesis-surgery/state-dump # monitor ops_boba/api/watcher-api/env-rinkeby.yml +ops_boba/api/watcher-api/env-goerli.yml ops_boba/api/watcher-api/env-mainnet.yml ops_boba/api/watcher-api/env.yml ops_boba/monitor/yarn.lock diff --git a/.secrets.baseline b/.secrets.baseline new file mode 100644 index 0000000000..ad305d9ab2 --- /dev/null +++ b/.secrets.baseline @@ -0,0 +1,112 @@ +{ + "version": "1.4.0", + "plugins_used": [ + { + "name": "ArtifactoryDetector" + }, + { + "name": "AWSKeyDetector" + }, + { + "name": "AzureStorageKeyDetector" + }, + { + "name": "Base64HighEntropyString", + "limit": 4.5 + }, + { + "name": "BasicAuthDetector" + }, + { + "name": "CloudantDetector" + }, + { + "name": "DiscordBotTokenDetector" + }, + { + "name": "GitHubTokenDetector" + }, + { + "name": "HexHighEntropyString", + "limit": 3.0 + }, + { + "name": "IbmCloudIamDetector" + }, + { + "name": "IbmCosHmacDetector" + }, + { + "name": "JwtTokenDetector" + }, + { + "name": "KeywordDetector", + "keyword_exclude": "" + }, + { + "name": "MailchimpDetector" + }, + { + "name": "NpmDetector" + }, + { + "name": "PrivateKeyDetector" + }, + { + "name": "SendGridDetector" + }, + { + "name": "SlackDetector" + }, + { + "name": "SoftlayerDetector" + }, + { + "name": "SquareOAuthDetector" + }, + { + "name": "StripeDetector" + }, + { + "name": "TwilioKeyDetector" + } + ], + "filters_used": [ + { + "path": "detect_secrets.filters.allowlist.is_line_allowlisted" + }, + { + "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", + "min_level": 2 + }, + { + "path": "detect_secrets.filters.heuristic.is_indirect_reference" + }, + { + "path": "detect_secrets.filters.heuristic.is_likely_id_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_lock_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_potential_uuid" + }, + { + "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" + }, + { + "path": "detect_secrets.filters.heuristic.is_sequential_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_swagger_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_templated_secret" + } + ], + "results": {}, + "generated_at": "2023-05-18T14:11:58Z" +} diff --git a/boba_community/boba-node/.env.example b/boba_community/boba-node/.env.example index 321e899fd2..84dd7eec3e 100644 --- a/boba_community/boba-node/.env.example +++ b/boba_community/boba-node/.env.example @@ -1,5 +1,5 @@ RELEASE_VERSION=v0.X.X # Mainnet -L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/YOUR_INFURA_KEY -# Rinkeby -L1_NODE_WEB3_URL=https://goerli.infura.io/v3/YOUR_INFURA_KEY +L1_NODE_WEB3_URL=https://mainnet.gateway.tenderly.co +# Goerli +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co diff --git a/boba_community/boba-node/state-dumps/bobabase/boba-addr.json b/boba_community/boba-node/state-dumps/bobabase/boba-addr.json index ddc560f3b4..c7cbd82e51 100644 --- a/boba_community/boba-node/state-dumps/bobabase/boba-addr.json +++ b/boba_community/boba-node/state-dumps/bobabase/boba-addr.json @@ -1,31 +1,46 @@ { - "TOKENS": { - "TEST": { - "L1": "0xB3780441b0437a8aAc1A4e5197D26515df200a83", - "L2": "0x664b2A06e4fd0779Ff5014b951cA20113a304CfD" - } - }, - "NFTs": {}, - "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1", - "Proxy__L1CrossDomainMessengerFast": "0xAE8885D3b7937af9480cd7301925a88Dfb0cE9f6", - "L2LiquidityPool": "0xEb0d3b107528FE17b9F55360D03351fe3D0ACaB2", - "L1LiquidityPool": "0xd779D5e0aDA790f382Cd80d0a90De533b8262b9f", - "Proxy__L1LiquidityPool": "0x569a3e1A4A50D0F53BDF05d50D5FeAB3f716f5A1", - "Proxy__L2LiquidityPool": "0xb227a9FebBa59B8Fe5dF7Ad81afac6E7CdE5a4A5", - "L2TokenPool": "0x152eE45C2eF3E6B303d0603C82b785255D386Fd0", - "L1Message": "0x3C285ACC9CAD39c94CF7E46850bd9098b6f858F5", - "L2Message": "0xECF2d55E35E14eC146f17a17B1D2e082bAA12B40", - "AtomicSwap": "0x2e965d49E69dA6182bdc331b740384CF8745A690", - "L2ERC721": "0x3a93df8eba34AFa4Fb74a09D7cb9BB6E528d2E0C", - "L2ERC721Reg": "0xb73Bc7AbED40236ca53b2225e3FA497c04A0F718", - "L1NFTBridge": "0xf5aCb091936715eCAC49d5759b4801703a175387", - "L2NFTBridge": "0x64371C6b9acFDBC14A98CD794a531Ff737Ef0F98", - "Proxy__L1NFTBridge": "0x1E12Ba552Ac35351563091737910d9E5d1DaD17a", - "Proxy__L2NFTBridge": "0x8E65834B52c3aCc79206a0F09c4b627BC588f09e", - "L1MultiMessageRelayerFast": "0x874a7Ea9722b96924e186f0263866FA90a7C777b", - "DiscretionaryExitFee": "0x01ce26900fC11aBc2AcF53154772bb251c8aA005", - "FeedRegistry": "0x0d2E819A8E0FC9377d3D488A9480D6C00ADE986F", - "BOBAUSD_Aggregator": "0x66335BA50c757a5b1Ee6FB3c3ed703e4a26ea526", - "BobaBillingContract": "0x17CC69Adc242f9C50132503A2e5d5d9cD4889786", - "Proxy__BobaBillingContract": "0x05C9f36D901594D220311B211fA26DbD58B87717" -} \ No newline at end of file + "AddressManager": "0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B", + "Proxy__L1StandardBridge": "0xEcca5FEd8154420403549f5d8F123fcE69fae806", + "Proxy__L1CrossDomainMessenger": "0x76DB375075F1d5Dcd1D70Fc07F69a5c7b40ab877", + "TK_L1BOBA": "0x1365fd7BcEE84686DBCA71e1571C0d9ad9E64945", + "TK_L2BOBA": "0x4200000000000000000000000000000000000006", + "TK_L1DEV": "0x0000000000000000000000000000000000000000", + "TK_L2DEV": "0x4200000000000000000000000000000000000023", + "TK_L1GLMR": "0x0000000000000000000000000000000000000000", + "TK_L2GLMR": "0x4200000000000000000000000000000000000023", + "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1", + "Proxy__L1CrossDomainMessengerFast": "0xAE8885D3b7937af9480cd7301925a88Dfb0cE9f6", + "L2LiquidityPool": "0x8D4B01Dd2868F388823c12Edce3dec65c22826ce", + "L1LiquidityPool": "0xf17727d61b93078427D9F381bc87C0F76e03124a", + "Proxy__L1LiquidityPool": "0x569a3e1A4A50D0F53BDF05d50D5FeAB3f716f5A1", + "Proxy__L2LiquidityPool": "0xb227a9FebBa59B8Fe5dF7Ad81afac6E7CdE5a4A5", + "L2TokenPool": "0x152eE45C2eF3E6B303d0603C82b785255D386Fd0", + "L1Message": "0x3C285ACC9CAD39c94CF7E46850bd9098b6f858F5", + "L2Message": "0xECF2d55E35E14eC146f17a17B1D2e082bAA12B40", + "AtomicSwap": "0x2e965d49E69dA6182bdc331b740384CF8745A690", + "L2ERC721": "0x3a93df8eba34AFa4Fb74a09D7cb9BB6E528d2E0C", + "L2ERC721Reg": "0xb73Bc7AbED40236ca53b2225e3FA497c04A0F718", + "L1NFTBridge": "0x3ddBca089BCAf1eF7ef5517c8887d3B2261F1292", + "L2NFTBridge": "0x59e8281F47D4E5B5Dfc2463313B8C5AF654a38b2", + "Proxy__L1NFTBridge": "0x1E12Ba552Ac35351563091737910d9E5d1DaD17a", + "Proxy__L2NFTBridge": "0x8E65834B52c3aCc79206a0F09c4b627BC588f09e", + "L1MultiMessageRelayerFast": "0x874a7Ea9722b96924e186f0263866FA90a7C777b", + "DiscretionaryExitFee": "0x01ce26900fC11aBc2AcF53154772bb251c8aA005", + "FeedRegistry": "0x0d2E819A8E0FC9377d3D488A9480D6C00ADE986F", + "BOBAUSD_Aggregator": "0x66335BA50c757a5b1Ee6FB3c3ed703e4a26ea526", + "BobaBillingContract": "0x17CC69Adc242f9C50132503A2e5d5d9cD4889786", + "Proxy__BobaBillingContract": "0x05C9f36D901594D220311B211fA26DbD58B87717", + "Boba_GasPriceOracle":"0xE7EEf1eDA522feE7C7752369B0CEE134CdD6AC16", + "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024", + "BobaTuringCredit": "0x4200000000000000000000000000000000000021", + "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", + "AuthenticatedFaucet": "0x8b6A1c0590Ab8A9CED9ADa87Df485eCdd97886E2", + "WBOBA9": "0xc03cc0d0995e7b677348e396F5F1D70Fe8667fCe", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x72F86F1c4157E367354C3E3aEfEf6Af1a6F1Dd6e", + "L2ERC1155Bridge": "0x9f4f7f4E80fc02ecB9C0cE20C8f8a9A5C589A1A9", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x92F4E3796324b916A69c98c96bBd939af19C4AD2", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" +} diff --git a/boba_community/boba-node/state-dumps/bobabnbtestnet/boba-addr.json b/boba_community/boba-node/state-dumps/bobabnbtestnet/boba-addr.json index 77a94b7621..5729da4ad1 100644 --- a/boba_community/boba-node/state-dumps/bobabnbtestnet/boba-addr.json +++ b/boba_community/boba-node/state-dumps/bobabnbtestnet/boba-addr.json @@ -1,19 +1,18 @@ { - "TOKENS": { - "TEST": { - "L1": "0xd68199568fc3a11f30CEB8eeB71eAa88961eDb17", - "L2": "0xb88cf499A746385051C7545b5EbE378361232beE" - }, - "BOBA": { - "L1": "0x875cD11fDf085e0E11B0EE6b814b6d0b38fA554C", - "L2": "0x4200000000000000000000000000000000000006" - } - }, - "NFTs": {}, + "AddressManager": "0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa", + "OVM_L1CrossDomainMessenger": "0x6fA80303E479Ea2d705F4f241Ef162aA2F793e71", + "Proxy__L1CrossDomainMessenger": "0x53aD38aE4a63Fe33a86E011F7AF4d3fDe3daD145", + "Proxy__L1StandardBridge": "0xBf0939120b4F5E3196b9E12cAC291e03dD058e9a", + "TK_L1BOBA": "0x875cD11fDf085e0E11B0EE6b814b6d0b38fA554C", + "TK_L2BOBA": "0x4200000000000000000000000000000000000006", + "TK_L1tBNB": "0x0000000000000000000000000000000000000000", + "TK_L2tBNB": "0x4200000000000000000000000000000000000023", + "TK_L1MTT": "0x02Ed46AA41fcb4a6f06a5F2D43A958F1e8c0A4E6", + "TK_L2MTT": "0xb3BE5C928E3ec6b11985753f7B3C43A8bB12Bc03", "L1CrossDomainMessengerFast": "0xf5a68fC4734a657652717aCC024fAb390274C0E6", "Proxy__L1CrossDomainMessengerFast": "0xbbD6a271abcC44f6dE284E6051Da76b4fB57458C", - "L2LiquidityPool": "0x8e449c8267cbe89e0615F6ea8FBf885B5755F90D", - "L1LiquidityPool": "0x026fCac45B06395f626c5e6698444B0B51bC7B43", + "L2LiquidityPool": "0xA68179E9b332F236ce3B7CEB919D6d1ab71d381D", + "L1LiquidityPool": "0x14797AD30590ae6F6d5d4fDe36AAf69900665420", "Proxy__L1LiquidityPool": "0xed142c7BdA2A3d5b08Eae78C96b37FFe60Fecf80", "Proxy__L2LiquidityPool": "0xa1786aDDe89d62014CC50bE01d53c16C7A80D460", "L2TokenPool": "0x14718bB320d6FC2681EF86864732211a9A0928dD", @@ -22,15 +21,27 @@ "AtomicSwap": "0x37FB8bB9EA100CA9a0DE822c9923643ef48Cb8EE", "L2ERC721": "0x81cF4cBEDF5602401178862f0225b93D2deB2E28", "L2ERC721Reg": "0x6737867ddd04272a79E7207a008f213e336b00e1", - "L1NFTBridge": "0x347cCB98f420E0E7fbeEd4808732b21C1C86db59", - "L2NFTBridge": "0x3de30b620bA8A44423F70c42f9ed973541d11B12", + "L1NFTBridge": "0x6eB147e1e8A16c05a4E60A41c6A3BB931f9DdaA3", + "L2NFTBridge": "0xB06cD0df19c13D1Ec6c0f77df3eA11299a70DE2E", "Proxy__L1NFTBridge": "0x4c3f621d01c22658F711c70a12662ECDfCA5916A", "Proxy__L2NFTBridge": "0x6fA80303E479Ea2d705F4f241Ef162aA2F793e71", "L1MultiMessageRelayerFast": "0x0F01394F5fc19bA1B9F669bA79b76c9EaAe37987", - "BobaTuringCredit": "0x4200000000000000000000000000000000000020", "DiscretionaryExitFee": "0x587fA2e1d797Ff79Bf86a24E156A559b6551b2B3", "FeedRegistry": "0xBf0939120b4F5E3196b9E12cAC291e03dD058e9a", "BOBAUSD_Aggregator": "0xeb92a5d7d92F5Af18DAdf6c6D7f02be55F3ff355", "BobaBillingContract": "0x72a3d638C4d022abED8A941aE856da28dB2faB7f", - "Proxy__BobaBillingContract": "0xe43Ff19D561EA6DB84Dd2Ec3754027fAFDa79499" + "Proxy__BobaBillingContract": "0xe43Ff19D561EA6DB84Dd2Ec3754027fAFDa79499", + "Boba_GasPriceOracle":"0xE7EEf1eDA522feE7C7752369B0CEE134CdD6AC16", + "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024", + "BobaTuringCredit": "0x4200000000000000000000000000000000000021", + "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", + "AuthenticatedFaucet": "0x4Bee9fE15Ff3645A85792607ce4Eee14ab9E9E02", + "WBOBA9": "0xb743f3A682C846ccC4584bd8bCb434320a769216", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x0Da288Fe17678c4474649BfD011889C17Fbc5450", + "L2ERC1155Bridge": "0x06de75EF5d9ea3B3D0A3E48F5D093b1A22331709", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x14cD766f245e804A0D7CFC6FC85796491d5B709E", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/boba_community/boba-node/state-dumps/bobafuji/boba-addr.json b/boba_community/boba-node/state-dumps/bobafuji/boba-addr.json new file mode 100644 index 0000000000..f72f6cb058 --- /dev/null +++ b/boba_community/boba-node/state-dumps/bobafuji/boba-addr.json @@ -0,0 +1,44 @@ +{ + "AddressManager": "0xcE78de95b85212BC348452e91e0e74c17cf37c79", + "Proxy__L1CrossDomainMessenger": "0x68c19B7FbAe4F8034cf6316b2045ba6aB6978F6b", + "Proxy__L1StandardBridge": "0x07B606934b5B5D6A9E1f8b78A0B26215FF58Ad56", + "TK_L1BOBA": "0xEaE78E78cC22690719361F65a50734A15aaE698C", + "TK_L2BOBA": "0x4200000000000000000000000000000000000006", + "TK_L1AVAX": "0x0000000000000000000000000000000000000000", + "TK_L2AVAX": "0x4200000000000000000000000000000000000023", + "L1CrossDomainMessengerFast": "0x3C6B8493047b44754EF57129d43d151040871bb7", + "Proxy__L1CrossDomainMessengerFast": "0xBc5249095c890F58C0b75795bd21667eFd123F5F", + "L2LiquidityPool": "0x99411339aB22441D6D5f49Ae63deE8c47db85D49", + "L1LiquidityPool": "0x58DbD9819BBB9356dB109d4Ff186BF2aed57dA93", + "Proxy__L1LiquidityPool": "0x30caB2fCA6260FB91B172D4AFB215514069868ea", + "Proxy__L2LiquidityPool": "0x9198b3f5C6acCf05dF8847766A68d992355c18c4", + "L2TokenPool": "0x5edFE3970732EA7878b6e17c1b7Cf27EcF108bC4", + "L1Message": "0x99411339aB22441D6D5f49Ae63deE8c47db85D49", + "L2Message": "0x089489B38e15B21A786791D4409f6E9e2afd7851", + "AtomicSwap": "0x5565f730cab69977E89F21de35f355F2F9fEB1C5", + "L2ERC721": "0xBdBF3b9803DDc910a77bF4852a283Edc055457e5", + "L2ERC721Reg": "0xb1f74c5A3c0cE11d1EB20c03393cc0234254C315", + "L1NFTBridge": "0xc7A1ba4bFdA4091803ee7a37B6bd66D87dFbd505", + "L2NFTBridge": "0x345281294Bb6c7Bc9B7eBFB70eeda80A6Cf5dDAF", + "Proxy__L1NFTBridge": "0xA7A1415eC63Bf410b27AcDAF42fC3c63756E2bFc", + "Proxy__L2NFTBridge": "0x2e59D69cA439b3ab0c1AD8b2762377Afb5C71C7B", + "L1MultiMessageRelayerFast": "0x5e6B412b4fA8373a17aD85B269fA5c354ea57e63", + "DiscretionaryExitFee": "0xED6760E89fB35731ae82d7D149d8c94fdDb376fE", + "FeedRegistry": "0x54CB1E4C1d5F545Ebe9C281927Ee4c0B514b9C33", + "BOBAUSD_Aggregator": "0xF4f9B28F450F3Ecc516D4c91CCFAe52C72c17D33", + "BobaBillingContract": "0xCD50AE5e592ea38bA036aE2a2D6A58f8CAd050BB", + "Proxy__BobaBillingContract": "0xB7E29AB7FB9b6406BAb33Cf6f868fE25B9Ad0160", + "Boba_GasPriceOracle":"0xE7EEf1eDA522feE7C7752369B0CEE134CdD6AC16", + "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024", + "BobaTuringCredit": "0x4200000000000000000000000000000000000021", + "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", + "AuthenticatedFaucet": "0x5f6D019832FA4522DB7b94A4fe0DDBb73212FAcE", + "WBOBA9": "0xA7cad1B188Ac7E4d05644D1cf1cBcEB4aD372a9D", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x6ece353E618C6dDaE8BAB1F8e27921E8763CC0fA", + "L2ERC1155Bridge": "0x02Ee265a5e6d486B4405A5cbbdB875Eb57Fe41dc", + "Proxy__L1L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x2001F1B2b72000C34a630a58861E1b5CDe1f63eb", + "Proxy__TeleportationAddress": "0xd68809330075C792C171C450B983F4D18128e9BF" +} diff --git a/boba_community/boba-node/state-dumps/bobaopera-testnet/boba-addr.json b/boba_community/boba-node/state-dumps/bobaopera-testnet/boba-addr.json index 54af82aa99..81c5a92f26 100644 --- a/boba_community/boba-node/state-dumps/bobaopera-testnet/boba-addr.json +++ b/boba_community/boba-node/state-dumps/bobaopera-testnet/boba-addr.json @@ -1,23 +1,15 @@ { - "TOKENS": { - "TEST": { - "L1": "0x524737f243D1D46a766815C1cBd1a0a83CDdc95c", - "L2": "0x730A47687B0Bc1B215619E5Be7E3D4Fa78fcf4dB" - }, - "BOBA": { - "L1": "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF", - "L2": "0x4200000000000000000000000000000000000006" - }, - "FTM": { - "L1": "0x0000000000000000000000000000000000000000", - "L2": "0x4200000000000000000000000000000000000023" - } - }, - "NFTs": {}, - "L1CrossDomainMessengerFast": "0x0Dbf4fba1854d4EcC21db09B33A32Ea5f20018ed", + "AddressManager": "0x12ad9f501149D3FDd703cC10c567F416B7F0af8b", + "Proxy__L1CrossDomainMessenger": "0xEecAD665ca933eeA4a9a2db600E538c1391930d1", + "Proxy__L1StandardBridge": "0x86FC7AeFcd69983A8d82eAB1E0EaFD38bB42fd3f", + "TK_L1BOBA": "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF", + "TK_L2BOBA": "0x4200000000000000000000000000000000000006", + "TK_L1FTM": "0x0000000000000000000000000000000000000000", + "TK_L2FTM": "0x4200000000000000000000000000000000000023", + "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1", "Proxy__L1CrossDomainMessengerFast": "0xE5781E5E9CbC67E91DF93eD01E922De30125e491", - "L2LiquidityPool": "0x00Fda9B3952f80c4238C371064FA6667b6146468", - "L1LiquidityPool": "0x6A27b80a11156A7aA88CF34EC73F130df4f28bED", + "L2LiquidityPool": "0xB9CeA621C2C9BE002747F2DdB7eB6a7dd0F8F20E", + "L1LiquidityPool": "0x0481480cf9f3a245aEB5f5c10360577Bb8949e40", "Proxy__L1LiquidityPool": "0x34024168ba3cfa608005b5E9f13389bb2532422A", "Proxy__L2LiquidityPool": "0xE7Da2a8EBcbBa0Dc6082B8D0faBAcA0176920760", "L2TokenPool": "0x352d964E9aD016f122dc78Afa5164417907E0FaF", @@ -26,16 +18,27 @@ "AtomicSwap": "0x1bc8Bd8FCAd96ee663b6325F71F818Cce678083D", "L2ERC721": "0x727207c505c1D95Ef7Ed93f74443D72C155064E7", "L2ERC721Reg": "0xb5F92c9d10539137C9602A626d7F98823e58f3aA", - "L1NFTBridge": "0xA3f17f06F7F02156692D795a1782105dA530631c", - "L2NFTBridge": "0xEecAD665ca933eeA4a9a2db600E538c1391930d1", + "L1NFTBridge": "0x621EdB64bC5bD6c088c969a8A7d7Eb1168E4F95D", + "L2NFTBridge": "0x30C18d90a6f9B161b8c0BB720b31BcF215FEc12b", "Proxy__L1NFTBridge": "0x5E52f340D43Ee819dd8a38D55Cc27293603Ac5fb", "Proxy__L2NFTBridge": "0x310FA48450dF21fBC99b937a7AafBc3B7Af6f6D1", "L1MultiMessageRelayerFast": "0x9Af237336C29dCbA346764af8e8E1F0ba83D1eE5", - "BobaTuringCredit": "0x4200000000000000000000000000000000000020", "DiscretionaryExitFee": "0x6E7033f647f932D23de37BD3b25b8F56DeAD4034", "FeedRegistry": "0x48dfB307f6fFbDB9229E63beA2C127e7500DC5Ae", "BOBAUSD_Aggregator": "0xA145e444abAd1Cb233A37cED870c59FD97e774bf", "BobaBillingContract": "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF", "Proxy__BobaBillingContract": "0x675Ea342D2a85D7db0Cc79AE64196ad628Ce8187", - "AddressManager": "0x12ad9f501149D3FDd703cC10c567F416B7F0af8b" + "Boba_GasPriceOracle":"0xE7EEf1eDA522feE7C7752369B0CEE134CdD6AC16", + "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024", + "BobaTuringCredit": "0x4200000000000000000000000000000000000021", + "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", + "AuthenticatedFaucet": "0xCED1459C6B56a85363426a502a24De99fBbF5a83", + "WBOBA9": "0xfd7f8a9F2D11B30a3571395Be9601720B6a32995", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x5c94ea55c8dC4aB27faDc18068d335006460DAe3", + "L2ERC1155Bridge": "0x0f5c544D2671F008D73C7c27654DbA58A4248604", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0xb34918D9C16e13e10Fa078C6CB6a9AE7a42FcAB3", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/boba_community/boba-node/state-dumps/goerli/boba-addr.json b/boba_community/boba-node/state-dumps/goerli/boba-addr.json index 58b69bac3b..0475727d67 100644 --- a/boba_community/boba-node/state-dumps/goerli/boba-addr.json +++ b/boba_community/boba-node/state-dumps/goerli/boba-addr.json @@ -22,8 +22,8 @@ "TK_L2xBOBA": "0x01c9DC8B9c66D61a56Db7bF3F5303Cd9E9c85B1F", "L1CrossDomainMessengerFast": "0x93f605b2f42d0380E35E50671153fbB8f0A1d257", "Proxy__L1CrossDomainMessengerFast": "0x8b5A2d6aE932e8224B15c2C87dc8A972301c1B5d", - "L2LiquidityPool": "0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148", - "L1LiquidityPool": "0x847bBdA8aE752d236D373aA1D0F9014c0787bFed", + "L2LiquidityPool": "0x3eF7f0bc313C1BdDB587d97207faA7Aef4b69484", + "L1LiquidityPool": "0xeAD5916eEd8c197e7122c42e693E576C51D74475", "Proxy__L1LiquidityPool": "0x1F32017A84dE07A524b9C6993D35B4bF70e8Dc93", "Proxy__L2LiquidityPool": "0xF121Fd008A17c8C76DF1f003f19523130060B5BA", "L2TokenPool": "0xc00933D40Cc84139075acf332f575CFB3846D408", @@ -32,8 +32,8 @@ "AtomicSwap": "0x8B0eF5250b5d6EfA877eAc15BBdfbD3C8069242F", "L2ERC721": "0x4CFeADc728fD25F2d88b23F3C3834a103330D9A1", "L2ERC721Reg": "0x7Bb4cfa36F9F3880e18a46B74bBb9B334F6600F3", - "L1NFTBridge": "0x126301CCbdd780Cd129e47594938FB17B3Da43DE", - "L2NFTBridge": "0xBd026eefc80c90ABe8A537F18D4071e9cec46510", + "L1NFTBridge": "0xcF904C33aF3e6246361fDAf5b87aED35F9A4E1ca", + "L2NFTBridge": "0x47bB313d73E5133faf7BEd67eE1c3DBB70456DB5", "Proxy__L1NFTBridge": "0xa2232D3c81EFd46815c1adf48Ed86C5C377cb6e2", "Proxy__L2NFTBridge": "0xF84979ADeb8D2Dd25f54cF8cBbB05C08eC188e11", "L1MultiMessageRelayerFast": "0xf3b489cCC93A9B74F17113E323E4Db2b1FdE2Cb8", @@ -50,11 +50,11 @@ "BobaTuringCredit": "0x4200000000000000000000000000000000000021", "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", - "L1ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "L1ERC1155Bridge": "0x1b3af95A5a1CD6Cee43dA9fc2f7ed2Beb4235076", "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", - "L2ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "L2ERC1155Bridge": "0x6444860D2837eD831B0711bfA407Ede32B7cbe84", "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF", - "Teleportation": "0x35789652C1166323596466A315f82722D1173336", + "Teleportation": "0x5e29dadEC77cDcA1Fd8fE672831e6264Cc077f62", "BobaMonsters": "0x240D31b369B4F5494fF6F04237B3E93bE52fAcb8", "Timelock": "0x66C893019bC366eB497f49c8Df79e63AF73124eA", "GovernorBravoDelegate": "0x22FDcc02fBBF24d829F7A0A69329d8d27477b0Df", @@ -65,5 +65,9 @@ "Ve_Voter": "0xA107508264aB36eFDc50C51a278B9286C6cB5ABB", "Ve_Dispatcher": "0x126301CCbdd780Cd129e47594938FB17B3Da43DE", "BASE_V1_VOTER": "0x8A52a736F632334459e2D710c9C73e07391dae06", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" + "AuthenticatedFaucet": "0x4E98bAbe5364452cD02FC8E0AD7d9E526B68a5D6", + "AggregatorHCHepler": "0x45c5dB3F5AC1579DD43404e47562641b61A6AC77", + "Proxy__ETHUSD_AggregatorHC": "0x9e28dE704435871af476460B456Ec741fE5DE24f", + "ETHUSD_AggregatorHC": "0x300f35972189d5FbEe140E552Dac80df85E6521C", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", } diff --git a/boba_community/boba-relayer/.env.example b/boba_community/boba-relayer/.env.example index fab387e601..ca545010f7 100644 --- a/boba_community/boba-relayer/.env.example +++ b/boba_community/boba-relayer/.env.example @@ -1,4 +1,4 @@ -L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://mainnet.boba.network +L1_NODE_WEB3_URL=https://mainnet.gateway.tenderly.co +L2_NODE_WEB3_URL=http://gateway.tenderly.co/public/boba-ethereum PRIV_KEY= L2_TRANSACTION_HASH= diff --git a/boba_community/boba-relayer/README.md b/boba_community/boba-relayer/README.md index b9db3e5465..faeac594bf 100644 --- a/boba_community/boba-relayer/README.md +++ b/boba_community/boba-relayer/README.md @@ -18,8 +18,8 @@ This script allows anyone to check the status of a cross chain message from L2 t Then, add `.env` in `boba/boba_community/boba-relayer`. ```yaml -L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://mainnet.boba.network +L1_NODE_WEB3_URL=https://mainnet.gateway.tenderly.co +L2_NODE_WEB3_URL=http://gateway.tenderly.co/public/boba-ethereum PRIV_KEY= L2_TRANSACTION_HASH= ``` diff --git a/boba_community/fraud-detector/README.md b/boba_community/fraud-detector/README.md index 1151557393..28db9e814b 100644 --- a/boba_community/fraud-detector/README.md +++ b/boba_community/fraud-detector/README.md @@ -14,17 +14,11 @@ The `boba_community/fraud-detector` repo contains Docker scripts and python sour The central idea is that if two (or more) geths injects the same transactions, then they should write the same blocks with the same state roots. If they don't, then there is a problem somewhere. Fundamentally, the security of rollups has little to do with math or cryptography - rather, security arises from the operator publicly depositing transactions and their corresponding state roots, and then, **having many independent nodes check those data for possible discrepancies**. -## Known Errors and State Root Mismatches in Boba - -* For the first 10 blocks, the chainID was set (incorrectly) to 28 rather than 288. Therefore, the EIP155 signatures fail for those blocks, and the Verifier cannot sync those blocks. This has been addressed by setting the L1_MAINNET_DEPLOYMENT_BLOCK to 10 blocks past the zero block. - -* There is one state root mismatch at L2 block 155, arising from a two second discrepancy in a timestamp, that was ultimately caused by a too-small setting for the number of confirmations (DATA_TRANSPORT_LAYER__CONFIRMATIONS). This value was therefore increased. - ## What do when you discover a state root mismatch Congratulations! The security of the L2 depends on community monitoring of the operator's actions. If you have discovered a state root mismatch, please file a GitHub issue (https://github.com/bobanetwork/boba/issues). We should have a good response/clarification for you quickly. In the future, with the Boba governance token, additional mechanisms will be released to incentivize and reward community monitoring of Boba. -## Running the Fraud Detector, the Verifier, and the Data Transport Layer (DTL) +## Running the Fraud Detector, the Verifier, and the Data Transport Layer (DTL) from local images **Requirements**: you will need a command line and Docker. Before filing GitHub issues, please make sure Docker is installed and *running*. @@ -35,22 +29,28 @@ $ git clone git@github.com:bobanetwork/boba.git $ cd boba $ yarn install $ yarn build +$ cd ops +$ docker-compose build ``` -Then, add your Infura key to `boba_community/fraud-detector/docker-compose-fraud-detector.yml`. If you do not have an Infura key, you can obtain one for free from [Infura](https://infura.io). +Next, navigate to `boba_community/fraud-detector` and set the RELEASE_VERSION environment variable: -```bash -x-l1_rpc_dtl: &l1_rpc_dtl - DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY' -x-l1_node_web3_url: &l1_node_web3_url - L1_NODE_WEB3_URL: 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY' +``` +$ cd boba_community/fraud-detector +$ export RELEASE_VERSION=latest ``` -Next, navigate to `boba_community/fraud-detector` and build the needed Docker images: +The 'latest' tag should resolve to the images you built locally in the previous step. -``` -$ cd boba_community/fraud-detector +Then, check the RPC endpoints in `boba_community/fraud-detector/docker-compose-fraud-detector.yml`. + +```bash +x-l1_rpc_dtl: &l1_rpc_dtl + DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: 'https://mainnet.gateway.tenderly.co' + +x-l1_node_web3_url: &l1_node_web3_url + L1_NODE_WEB3_URL: 'https://mainnet.gateway.tenderly.co' ``` Next, spin up the `Fraud Detector` and other neccessary services (the `Verifier L2 Geth` and the `Data Transport Layer`) @@ -63,7 +63,7 @@ Finally, **Open another terminal window** and upload the `addresses.json` to the ```bash $ cd boba/boba_community/fraud-detector -$ curl -H "Content-Type: application/json" -T ./addresses.json http://localhost:8080/addresses.json +$ curl -H "Content-Type: application/json" -T state-dumps/mainnet/addresses.json http://localhost:8080/addresses.json ``` The system will start and the `Verifier L2 Geth` will begin to sync with the Boba L2 via data it deposited into the core Boba contracts on Ethereum Mainnet. **The sync process can take several hours to complete**. During the sync process, you will see the Verifier gradually catch up with the Boba L2: @@ -125,3 +125,11 @@ verifier_dtl_1 | {"level":30,"time":1636134645380,"highestSyncedL1Block":135 ... ``` + +## Known Errors and State Root Mismatches in Boba-V1 + +* This directory contains a "docker-compose-v1_mainnet.yml" file which is configured to process the original chain prior to the October 2021 regenesis event. The DTL and l2geth images supporting this era are available from dockerhub, or may be built from the https://github.com/omgnetwork/optimism repository. The fraud-detector may be built from this repository or (if available) from a dockerhub image built after May 2023 which includes support for the V1 name of the OVM_StateCommitmentChain. + +* For the first 10 blocks of the V1 chain (between L1 heights of 13011896 and 13502893), the chainID was set (incorrectly) to 28 rather than 288. Therefore, the EIP155 signatures fail for those blocks, and the Verifier cannot sync those blocks. This has been addressed by overriding the chain ID of those blocks in a modified DTL (the rc1.0-surgery tag). In the fraud-detector log, these 10 blocks will show a mismatch but the stateroots should re-synchronize at block 11. + +* There is one state root mismatch at L2 block 155, arising from a two second discrepancy in a timestamp, that was ultimately caused by a too-small setting for the number of confirmations (DATA_TRANSPORT_LAYER__CONFIRMATIONS). This value was therefore increased. This is also handled by the rc1.0-surgery DTL. diff --git a/boba_community/fraud-detector/docker-compose-goerli.yml b/boba_community/fraud-detector/docker-compose-goerli.yml new file mode 100644 index 0000000000..d152fd0511 --- /dev/null +++ b/boba_community/fraud-detector/docker-compose-goerli.yml @@ -0,0 +1,100 @@ +version: "3" + +x-l1_rpc_dtl: &l1_rpc_dtl + DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: https://rpc.ankr.com/eth_goerli + +x-l1_node_web3_url: &l1_node_web3_url + L1_NODE_WEB3_URL: https://rpc.ankr.com/eth_goerli + +services: + verifier_dtl: + image: bobanetwork/data-transport-layer:${RELEASE_VERSION} + env_file: + - ../../ops/envs/dtl.env + environment: + <<: *l1_rpc_dtl + DATA_TRANSPORT_LAYER__CONFIRMATIONS: 8 + DATA_TRANSPORT_LAYER__SYNC_FROM_L1: 'true' + DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'false' + DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 2888 + DATA_TRANSPORT_LAYER__ETH1_CTC_DEPLOYMENT_HEIGHT: 7867494 + DATA_TRANSPORT_LAYER__POLLING_INTERVAL: 10000 + DATA_TRANSPORT_LAYER__ADDRESS_MANAGER: '0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148' + DATA_TRANSPORT_LAYER__BSS_HARDFORK_1_INDEX: 0 + DATA_TRANSPORT_LAYER__TURING_V0_HEIGHT: 0 + DATA_TRANSPORT_LAYER__TURING_V1_HEIGHT: 0 + volumes: + - ./state-dumps/goerli/:/opt/optimism/packages/data-transport-layer/state-dumps/ + # - ./:/db/ + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${DTL_PORT:-7878}:7878 + - ${REGISTRY_PORT:-8080}:8081 + + verifier_l2geth: + depends_on: + - verifier_dtl + image: bobanetwork/l2geth:${RELEASE_VERSION} + deploy: + replicas: 1 + entrypoint: sh ./geth.sh + env_file: + - ../../ops/envs/geth.env + #volumes: + # - ./:/root/.ethereum/ + environment: + ROLLUP_TIMESTAMP_REFRESH: 5s + ROLLUP_STATE_DUMP_PATH: http://verifier_dtl:8081/state-dump.latest.json + ROLLUP_CLIENT_HTTP: http://verifier_dtl:7878 + ROLLUP_BACKEND: 'l1' + ROLLUP_VERIFIER_ENABLE: 'true' + RETRIES: 1000 + # no need to keep this secret, only used internally to sign blocks + BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27" + BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F" + ROLLUP_POLL_INTERVAL_FLAG: "10s" + ROLLUP_ENFORCE_FEES: 'true' + # turing + TURING_CREDIT_ADDRESS: "0x4200000000000000000000000000000000000020" + # fee token + L2_BOBA_TOKEN_ADDRESS: "0x4200000000000000000000000000000000000023" + BOBA_GAS_PRICE_ORACLE_ADDRESS: "0x4200000000000000000000000000000000000024" + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${VERIFIER_HTTP_PORT:-8547}:8545 + - ${VERIFIER_WS_PORT:-8548}:8546 + + fraud-detector: + depends_on: + - verifier_dtl + - verifier_l2geth + image: bobanetwork/fraud-detector:${RELEASE_VERSION} + deploy: + replicas: 1 + environment: + <<: *l1_node_web3_url + L1_CONFIRMATIONS: 8 + L2_NODE_WEB3_URL: https://replica.goerli.boba.network + L2_CHECK_INTERVAL: 10 + VERIFIER_WEB3_URL: http://verifier_l2geth:8545 + ADDRESS_MANAGER_ADDRESS: '0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148' + L1_DEPLOYMENT_BLOCK: 7867494 + L2_START_BLOCK: 1 + #volumes: + # - ./:/db/ + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${FRAUD_CHECKER_HTTP_PORT:-8555}:8555 + diff --git a/boba_community/fraud-detector/docker-compose-v1_mainnet.yml b/boba_community/fraud-detector/docker-compose-v1_mainnet.yml new file mode 100644 index 0000000000..e9902e4f3b --- /dev/null +++ b/boba_community/fraud-detector/docker-compose-v1_mainnet.yml @@ -0,0 +1,100 @@ +version: "3" + +x-l1_rpc_dtl: &l1_rpc_dtl + DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: 'https://mainnet.gateway.tenderly.co' + +x-l1_node_web3_url: &l1_node_web3_url + L1_NODE_WEB3_URL: 'https://mainnet.gateway.tenderly.co' + +services: + verifier_dtl: + image: omgx/data-transport-layer:rc1.0-surgery + env_file: + - ../../ops/envs/dtl.env + environment: + <<: *l1_rpc_dtl + DATA_TRANSPORT_LAYER__CONFIRMATIONS: 8 + DATA_TRANSPORT_LAYER__SYNC_FROM_L1: 'true' + DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'false' + DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 288 + DATA_TRANSPORT_LAYER__ETH1_CTC_DEPLOYMENT_HEIGHT: 13011896 + DATA_TRANSPORT_LAYER__POLLING_INTERVAL: 10000 + DATA_TRANSPORT_LAYER__ADDRESS_MANAGER: '0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089' + volumes: + - ./state-dumps/v1_mainnet/:/opt/optimism/packages/data-transport-layer/state-dumps/ + # - ./:/db/ + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${DTL_PORT:-7878}:7878 + - ${REGISTRY_PORT:-8080}:8081 + + verifier_l2geth: + depends_on: + - verifier_dtl + image: omgx/l2geth:rc1.0 + deploy: + replicas: 1 + entrypoint: sh ./geth.sh + env_file: + - ../../ops/envs/geth.env + #volumes: + # - ./:/root/.ethereum/ + environment: + ROLLUP_TIMESTAMP_REFRESH: 5s + ROLLUP_STATE_DUMP_PATH: http://verifier_dtl:8081/state-dump.latest.json + ROLLUP_CLIENT_HTTP: http://verifier_dtl:7878 + ROLLUP_BACKEND: 'l1' + ROLLUP_VERIFIER_ENABLE: 'true' + RETRIES: 60 + # no need to keep this secret, only used internally to sign blocks + BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27" + BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F" + ROLLUP_POLL_INTERVAL_FLAG: "10s" + ROLLUP_ENFORCE_FEES: 'true' + DEV: true + CHAIN_ID: 288 + NETWORK_ID: 288 + ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS: "0x6D4528d192dB72E282265D6092F4B872f9Dff69e" + ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS: "0x1f2414D0af8741Bc822dBc2f88069c2b2907a840" + ETH1_L1_STANDARD_BRIDGE_ADDRESS: "0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00" + ETH1_L1_FEE_WALLET_ADDRESS: 0xbF159Ba5E5917551c70E377ADf21eD3736209fCE + ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS: 0xd86D22c02E301BE7C35e3Ef20962f614cAf32B76 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${VERIFIER_HTTP_PORT:-8547}:8545 + - ${VERIFIER_WS_PORT:-8548}:8546 + + fraud-detector: + depends_on: + - verifier_dtl + - verifier_l2geth + image: bobanetwork/fraud-detector:${RELEASE_VERSION} + deploy: + replicas: 1 + environment: + <<: *l1_node_web3_url + L1_CONFIRMATIONS: 8 + L2_NODE_WEB3_URL: http://verifier_l2geth:8545 # There is no active Layer2 for V1_mainnet + L2_CHECK_INTERVAL: 10 + VERIFIER_WEB3_URL: http://verifier_l2geth:8545 + ADDRESS_MANAGER_ADDRESS: '0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089' + L1_DEPLOYMENT_BLOCK: 13011896 + L2_START_BLOCK: 1 + SCC_NAME: 'OVM_StateCommitmentChain' + #volumes: + # - ./:/db/ + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + ports: + - ${FRAUD_CHECKER_HTTP_PORT:-8555}:8555 diff --git a/boba_community/fraud-detector/docker-compose.yml b/boba_community/fraud-detector/docker-compose.yml index 89de25a449..852a28e761 100644 --- a/boba_community/fraud-detector/docker-compose.yml +++ b/boba_community/fraud-detector/docker-compose.yml @@ -1,30 +1,31 @@ version: "3" x-l1_rpc_dtl: &l1_rpc_dtl - DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY' + DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: 'https://mainnet.gateway.tenderly.co' x-l1_node_web3_url: &l1_node_web3_url - L1_NODE_WEB3_URL: 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY' + L1_NODE_WEB3_URL: 'https://mainnet.gateway.tenderly.co' services: verifier_dtl: - image: bobanetwork/data-transport-layer:release + image: bobanetwork/data-transport-layer:${RELEASE_VERSION} env_file: - ../../ops/envs/dtl.env environment: - <<: *l1_rpc_dtl - DATA_TRANSPORT_LAYER__CONFIRMATIONS: 8 - DATA_TRANSPORT_LAYER__SYNC_FROM_L1: 'true' - DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'false' - DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 288 - DATA_TRANSPORT_LAYER__ADDRESS_MANAGER: '0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089' - DATA_TRANSPORT_LAYER__POLLING_INTERVAL: 10000 - DATA_TRANSPORT_LAYER__ETH1_CTC_DEPLOYMENT_HEIGHT: 13502893 - DATA_TRANSPORT_LAYER__BSS_HARDFORK_1_INDEX: 381145 - DATA_TRANSPORT_LAYER__TURING_V0_HEIGHT: 381145 - DATA_TRANSPORT_LAYER__TURING_V1_HEIGHT: 381145 + <<: *l1_rpc_dtl + DATA_TRANSPORT_LAYER__CONFIRMATIONS: 8 + DATA_TRANSPORT_LAYER__SYNC_FROM_L1: 'true' + DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'false' + DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 288 + DATA_TRANSPORT_LAYER__ETH1_CTC_DEPLOYMENT_HEIGHT: 13502893 + DATA_TRANSPORT_LAYER__POLLING_INTERVAL: 10000 + DATA_TRANSPORT_LAYER__ADDRESS_MANAGER: '0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089' + DATA_TRANSPORT_LAYER__BSS_HARDFORK_1_INDEX: 381145 + DATA_TRANSPORT_LAYER__TURING_V0_HEIGHT: 381145 + DATA_TRANSPORT_LAYER__TURING_V1_HEIGHT: 381145 volumes: - - ./:/opt/optimism/packages/data-transport-layer/state-dumps/ + - ./state-dumps/mainnet/:/opt/optimism/packages/data-transport-layer/state-dumps/ + # - ./:/db/ logging: driver: "json-file" options: @@ -37,29 +38,31 @@ services: verifier_l2geth: depends_on: - verifier_dtl - image: bobanetwork/l2geth:release + image: bobanetwork/l2geth:${RELEASE_VERSION} deploy: replicas: 1 entrypoint: sh ./geth.sh env_file: - ../../ops/envs/geth.env + #volumes: + # - ./:/root/.ethereum/ environment: - ROLLUP_TIMESTAMP_REFRESH: 5s - ROLLUP_STATE_DUMP_PATH: http://verifier_dtl:8081/state-dump.latest.json - ROLLUP_CLIENT_HTTP: http://verifier_dtl:7878 - ROLLUP_BACKEND: 'l1' - ROLLUP_VERIFIER_ENABLE: 'true' - RETRIES: 60 - # no need to keep this secret, only used internally to sign blocks - BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27" - BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F" - ROLLUP_POLL_INTERVAL_FLAG: "10s" - ROLLUP_ENFORCE_FEES: 'true' - # turing credit contract - TURING_CREDIT_ADDRESS: "0xF8D2f1b0292C0Eeef80D8F47661A9DaCDB4b23bf" - # fee token - L2_BOBA_TOKEN_ADDRESS: "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7" - BOBA_GAS_PRICE_ORACLE_ADDRESS: "0xeE06ee2F239d2ab11792D77f3C347d919ddA0d51" + ROLLUP_TIMESTAMP_REFRESH: 5s + ROLLUP_STATE_DUMP_PATH: http://verifier_dtl:8081/state-dump.latest.json + ROLLUP_CLIENT_HTTP: http://verifier_dtl:7878 + ROLLUP_BACKEND: 'l1' + ROLLUP_VERIFIER_ENABLE: 'true' + RETRIES: 60 + # no need to keep this secret, only used internally to sign blocks + BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27" + BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F" + ROLLUP_POLL_INTERVAL_FLAG: "10s" + ROLLUP_ENFORCE_FEES: 'true' + # turing + TURING_CREDIT_ADDRESS: "0xF8D2f1b0292C0Eeef80D8F47661A9DaCDB4b23bf" + # fee token + L2_BOBA_TOKEN_ADDRESS: "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7" + BOBA_GAS_PRICE_ORACLE_ADDRESS: "0xeE06ee2F239d2ab11792D77f3C347d919ddA0d51" logging: driver: "json-file" options: @@ -73,7 +76,7 @@ services: depends_on: - verifier_dtl - verifier_l2geth - image: bobanetwork/fraud-detector:release + image: bobanetwork/fraud-detector:${RELEASE_VERSION} deploy: replicas: 1 environment: @@ -85,6 +88,8 @@ services: ADDRESS_MANAGER_ADDRESS: '0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089' L1_DEPLOYMENT_BLOCK: 13502893 L2_START_BLOCK: 1 + #volumes: + # - ./:/db/ logging: driver: "json-file" options: @@ -92,4 +97,3 @@ services: max-size: "10m" ports: - ${FRAUD_CHECKER_HTTP_PORT:-8555}:8555 - diff --git a/boba_community/fraud-detector/docker/Dockerfile.fraud-detector b/boba_community/fraud-detector/docker/Dockerfile.fraud-detector index 16f28473f4..9a7261ca54 100644 --- a/boba_community/fraud-detector/docker/Dockerfile.fraud-detector +++ b/boba_community/fraud-detector/docker/Dockerfile.fraud-detector @@ -2,7 +2,7 @@ FROM python:3.8-slim RUN apt-get update \ && apt-get install gcc -y \ && apt-get clean -RUN pip3 install --no-cache-dir web3 +RUN pip3 install --no-cache-dir web3==5.31.4 COPY boba_community/fraud-detector/fraud-detector.py / COPY boba_community/fraud-detector/packages/jsonrpclib /jsonrpclib COPY /packages/contracts/artifacts/contracts/L1/rollup/StateCommitmentChain.sol/StateCommitmentChain.json /contracts/StateCommitmentChain.json diff --git a/boba_community/fraud-detector/fraud-detector.py b/boba_community/fraud-detector/fraud-detector.py index a658c9e68a..c362353fb7 100644 --- a/boba_community/fraud-detector/fraud-detector.py +++ b/boba_community/fraud-detector/fraud-detector.py @@ -32,6 +32,8 @@ logger.debug (os.environ['L1_DEPLOYMENT_BLOCK']) logger.debug (os.environ['L2_START_BLOCK']) logger.debug (os.environ['L2_CHECK_INTERVAL']) +if 'SCC_NAME' in os.environ: + logger.debug (os.environ['SCC_NAME']) l1_confirmations = int(os.environ['L1_CONFIRMATIONS']) # These can be changed from the defaults to start at a previously verified @@ -130,7 +132,11 @@ def loadContract(rpc, addr, abiPath): return c address_manager = loadContract(rpc[1],os.environ['ADDRESS_MANAGER_ADDRESS'],'./contracts/Lib_AddressManager.json') -scc_addr = address_manager.functions.getAddress("StateCommitmentChain").call() +if 'SCC_NAME' in os.environ: + # V1 overrides this to "OVM_StateCommitmentChain" + scc_addr = address_manager.functions.getAddress(os.environ['SCC_NAME']).call() +else: + scc_addr = address_manager.functions.getAddress("StateCommitmentChain").call() scc_contract = loadContract(rpc[1],scc_addr,'./contracts/StateCommitmentChain.json') rCount = element_start - 1 diff --git a/boba_community/fraud-detector/state-dumps/goerli/addresses.json b/boba_community/fraud-detector/state-dumps/goerli/addresses.json new file mode 100644 index 0000000000..04e1406529 --- /dev/null +++ b/boba_community/fraud-detector/state-dumps/goerli/addresses.json @@ -0,0 +1,16 @@ +{ + "BondManager": "0xF84979ADeb8D2Dd25f54cF8cBbB05C08eC188e11", + "CanonicalTransactionChain": "0x8B0eF5250b5d6EfA877eAc15BBdfbD3C8069242F", + "ChainStorageContainer-CTC-batches": "0x01c9DC8B9c66D61a56Db7bF3F5303Cd9E9c85B1F", + "ChainStorageContainer-CTC-queue": "0x42356f071B65FD0FBA2b74566EB1D3634F008CDa", + "ChainStorageContainer-SCC-batches": "0xc6B47b2f5DF0C84fa91Ae2bBA733Ee72a6c4830e", + "L1MultiMessageRelayer": "0xebE42F5cEA2184F6b416bFFAB0744b11281AE95b", + "AddressManager": "0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148", + "OVM_L1CrossDomainMessenger": "0x6d849602Ed00D3680e1820929B6Bdc86169cbE21", + "Proxy__L1CrossDomainMessenger": "0xA6fA0867F39f3A3af7433C8A43f23bf26Efd1a48", + "Proxy__L1StandardBridge": "0xDBD71249Fe60c9f9bF581b3594734E295EAfA9b2", + "StateCommitmentChain": "0x7Bb4cfa36F9F3880e18a46B74bBb9B334F6600F3", + "TK_L1BOBA": "0xeCCD355862591CBB4bB7E7dD55072070ee3d0fC1", + "OVM_Sequencer": "0x0000000000000000000000000000000000000000", + "Deployer": "0x122816e7A7AeB40601d0aC0DCAA8402F7aa4cDfA" +} \ No newline at end of file diff --git a/boba_community/fraud-detector/state-dumps/goerli/boba-addr.json b/boba_community/fraud-detector/state-dumps/goerli/boba-addr.json new file mode 100644 index 0000000000..58b69bac3b --- /dev/null +++ b/boba_community/fraud-detector/state-dumps/goerli/boba-addr.json @@ -0,0 +1,69 @@ +{ + "BondManager": "0xF84979ADeb8D2Dd25f54cF8cBbB05C08eC188e11", + "CanonicalTransactionChain": "0x8B0eF5250b5d6EfA877eAc15BBdfbD3C8069242F", + "ChainStorageContainer-CTC-batches": "0x01c9DC8B9c66D61a56Db7bF3F5303Cd9E9c85B1F", + "ChainStorageContainer-CTC-queue": "0x42356f071B65FD0FBA2b74566EB1D3634F008CDa", + "ChainStorageContainer-SCC-batches": "0xc6B47b2f5DF0C84fa91Ae2bBA733Ee72a6c4830e", + "L1MultiMessageRelayer": "0xebE42F5cEA2184F6b416bFFAB0744b11281AE95b", + "AddressManager": "0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148", + "OVM_L1CrossDomainMessenger": "0x6d849602Ed00D3680e1820929B6Bdc86169cbE21", + "Proxy__L1CrossDomainMessenger": "0xA6fA0867F39f3A3af7433C8A43f23bf26Efd1a48", + "Proxy__L1StandardBridge": "0xDBD71249Fe60c9f9bF581b3594734E295EAfA9b2", + "StateCommitmentChain": "0x7Bb4cfa36F9F3880e18a46B74bBb9B334F6600F3", + "TK_L1BOBA": "0xeCCD355862591CBB4bB7E7dD55072070ee3d0fC1", + "TK_L2BOBA": "0x4200000000000000000000000000000000000023", + "TK_L2WETH9": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "TK_L1ETH": "0x0000000000000000000000000000000000000000", + "TK_L2ETH": "0x4200000000000000000000000000000000000006", + "TK_L1USDC": "0x07865c6E87B9F70255377e024ace6630C1Eaa37F", + "TK_L2USDC": "0x429582bDe1B0E011C48d883354050938f194743F", + "TK_L1OMG": "0xCb9b561c91dDA1A9bAc33F7716a4d5586B7F5649", + "TK_L2OMG": "0x080bf38b43a1441873116002d36CCB583464cF45", + "TK_L2xBOBA": "0x01c9DC8B9c66D61a56Db7bF3F5303Cd9E9c85B1F", + "L1CrossDomainMessengerFast": "0x93f605b2f42d0380E35E50671153fbB8f0A1d257", + "Proxy__L1CrossDomainMessengerFast": "0x8b5A2d6aE932e8224B15c2C87dc8A972301c1B5d", + "L2LiquidityPool": "0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148", + "L1LiquidityPool": "0x847bBdA8aE752d236D373aA1D0F9014c0787bFed", + "Proxy__L1LiquidityPool": "0x1F32017A84dE07A524b9C6993D35B4bF70e8Dc93", + "Proxy__L2LiquidityPool": "0xF121Fd008A17c8C76DF1f003f19523130060B5BA", + "L2TokenPool": "0xc00933D40Cc84139075acf332f575CFB3846D408", + "L1Message": "0x6105B7cF3b227e78b8792EfcE9ac75bC1b72D2cE", + "L2Message": "0xc6B47b2f5DF0C84fa91Ae2bBA733Ee72a6c4830e", + "AtomicSwap": "0x8B0eF5250b5d6EfA877eAc15BBdfbD3C8069242F", + "L2ERC721": "0x4CFeADc728fD25F2d88b23F3C3834a103330D9A1", + "L2ERC721Reg": "0x7Bb4cfa36F9F3880e18a46B74bBb9B334F6600F3", + "L1NFTBridge": "0x126301CCbdd780Cd129e47594938FB17B3Da43DE", + "L2NFTBridge": "0xBd026eefc80c90ABe8A537F18D4071e9cec46510", + "Proxy__L1NFTBridge": "0xa2232D3c81EFd46815c1adf48Ed86C5C377cb6e2", + "Proxy__L2NFTBridge": "0xF84979ADeb8D2Dd25f54cF8cBbB05C08eC188e11", + "L1MultiMessageRelayerFast": "0xf3b489cCC93A9B74F17113E323E4Db2b1FdE2Cb8", + "DiscretionaryExitFee": "0x999933FF5284038197602a80173F4f4ECb634866", + "BobaFixedSavings": "0x6105B7cF3b227e78b8792EfcE9ac75bC1b72D2cE", + "Proxy__BobaFixedSavings": "0xDBD71249Fe60c9f9bF581b3594734E295EAfA9b2", + "FeedRegistry": "0xE84AAb853C4FBaafd3eD795F67494d4Da1539492", + "ETHUSD_Aggregator": "0x47b45765ee4e270dE60852295bB0Dd105E1A4Df0", + "BOBAUSD_Aggregator": "0xbcA151440F29c10BeBA5a410c52914e236Fc9845", + "BobaBillingContract": "0x3CE051cB75e2b5c13BDe8a40Fe7305Ca42e4eEcf", + "Proxy__BobaBillingContract": "0x04A6e2AB38BB53bD82ae1Aa0521633D640304ab9", + "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025", + "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024", + "BobaTuringCredit": "0x4200000000000000000000000000000000000021", + "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "L1ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "L2ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF", + "Teleportation": "0x35789652C1166323596466A315f82722D1173336", + "BobaMonsters": "0x240D31b369B4F5494fF6F04237B3E93bE52fAcb8", + "Timelock": "0x66C893019bC366eB497f49c8Df79e63AF73124eA", + "GovernorBravoDelegate": "0x22FDcc02fBBF24d829F7A0A69329d8d27477b0Df", + "GovernorBravoDelegator": "0xf3b489cCC93A9B74F17113E323E4Db2b1FdE2Cb8", + "GovernorBravoDelegatorV2": "0xf3b489cCC93A9B74F17113E323E4Db2b1FdE2Cb8", + "Ve_BOBA": "0x247571C8151eB78d4fDc8AAb233C2734BDB811c5", + "Ve_Gauge": "0x72f30dBB4457a72C688da25A05D333A3ef065C2b", + "Ve_Voter": "0xA107508264aB36eFDc50C51a278B9286C6cB5ABB", + "Ve_Dispatcher": "0x126301CCbdd780Cd129e47594938FB17B3Da43DE", + "BASE_V1_VOTER": "0x8A52a736F632334459e2D710c9C73e07391dae06", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" +} diff --git a/boba_community/fraud-detector/state-dumps/goerli/state-dump.latest.json b/boba_community/fraud-detector/state-dumps/goerli/state-dump.latest.json new file mode 100644 index 0000000000..bf60aabb9f --- /dev/null +++ b/boba_community/fraud-detector/state-dumps/goerli/state-dump.latest.json @@ -0,0 +1,171 @@ +{ + "commit": "d2f704f45ad31d6013a7812b4ccaa6860da9bc75", + "config": { + "chainId": 2888, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "clique": { + "period": 0, + "epoch": 30000 + } + }, + "difficulty": "1", + "gasLimit": "11000000", + "extradata": "0x000000000000000000000000000000000000000000000000000000000000000000000398232E2064F896018496b4b44b3D62751F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "alloc": { + "0x4200000000000000000000000000000000000000": { + "balance": "00", + "storage": {}, + "code": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806382e3702d1461003b578063cafa81dc14610072575b600080fd5b61005e610049366004610112565b60006020819052908152604090205460ff1681565b604051901515815260200160405180910390f35b61008561008036600461015a565b610087565b005b6001600080833360405160200161009f929190610229565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301208352908201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905550565b60006020828403121561012457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561016c57600080fd5b813567ffffffffffffffff8082111561018457600080fd5b818401915084601f83011261019857600080fd5b8135818111156101aa576101aa61012b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156101f0576101f061012b565b8160405282815287602084870101111561020957600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000835160005b8181101561024a5760208187018101518583015201610230565b81811115610259576000828501525b5060609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014019291505056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000002": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "code": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80639b19251a116100505780639b19251a146100e9578063b1540a011461011c578063bdc7b54f1461012f57600080fd5b806308fd63221461007757806313af40351461008c5780638da5cb5b1461009f575b600080fd5b61008a610085366004610614565b610137565b005b61008a61009a366004610650565b610271565b6000546100bf9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010c6100f7366004610650565b60016020526000908152604090205460ff1681565b60405190151581526020016100e0565b61010c61012a366004610650565b61047c565b61008a6104cd565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f6865206f776e6572206f66207468697320636f6e74726163742e00000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d910160405180910390a15050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f6865206f776e6572206f66207468697320636f6e74726163742e00000000000060648201526084016101da565b73ffffffffffffffffffffffffffffffffffffffff81166103e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f4f564d5f4465706c6f79657257686974656c6973743a2077686974656c69737460448201527f2063616e206f6e6c792062652064697361626c65642076696120656e61626c6560648201527f417262697472617279436f6e74726163744465706c6f796d656e740000000000608482015260a4016101da565b6000546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff1615806104c7575073ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff165b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f6865206f776e6572206f66207468697320636f6e74726163742e00000000000060648201526084016101da565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681527fc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd49060200160405180910390a1600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461060f57600080fd5b919050565b6000806040838503121561062757600080fd5b610630836105eb565b91506020830135801515811461064557600080fd5b809150509250929050565b60006020828403121561066257600080fd5b61066b826105eb565b939250505056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000007": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000000dead", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000a6fa0867f39f3a3af7433c8a43f23bf26efd1a48", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000000000000000000000000000000000000000186a0" + }, + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea164736f6c6343000809000a" + }, + "0x420000000000000000000000000000000000000F": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000b2780babbe5eaf6b611cacc5cf3db1c669224f60", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000000000000000000000000000000000003b9aca00", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000003b9aca00", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000abe", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000000000000000000000000000000000000016e360", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000006" + }, + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063f2fde38b11610066578063f2fde38b146101ea578063f45e65d8146101fd578063fb75474714610206578063fe173b971461021957600080fd5b80638da5cb5b14610189578063bede39b5146101b1578063bf1fe420146101c4578063de26c4a1146101d757600080fd5b8063519b4bd3116100d3578063519b4bd314610152578063704655971461015b578063715018a61461016e5780638c8885c81461017657600080fd5b80630c18c16214610105578063313ce567146101215780633577afc51461012a57806349948e0e1461013f575b600080fd5b61010e60035481565b6040519081526020015b60405180910390f35b61010e60055481565b61013d61013836600461090c565b610222565b005b61010e61014d366004610954565b6102e4565b61010e60025481565b61013d61016936600461090c565b610340565b61013d6103f6565b61013d61018436600461090c565b610483565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610118565b61013d6101bf36600461090c565b610539565b61013d6101d236600461090c565b6105ef565b61010e6101e5366004610954565b6106a5565b61013d6101f8366004610a23565b610749565b61010e60045481565b61010e610214366004610954565b610879565b61010e60015481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60038190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6000806102f0836106a5565b90506000600254826103029190610a8f565b90506000600554600a6103159190610bec565b90506000600454836103279190610a8f565b905060006103358383610bf8565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b60048190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a906020016102d9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b6104816000610897565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b60058190556040518181527fd68112a8707e326d08be3656b528c1bcc5bbbfc47f4177e2179b14d8640838c1906020016102d9565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b60028190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c44906020016102d9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b60018190556040518181527ffcdccc6074c6c42e4bd578aa9870c697dc976a270968452d2b8c8dc369fae396906020016102d9565b600080805b8351811015610722578381815181106106c5576106c5610c33565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016610702576106fb600483610c62565b9150610710565b61070d601083610c62565b91505b8061071a81610c7a565b9150506106aa565b506000600354826107339190610c62565b905061074181610440610c62565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b73ffffffffffffffffffffffffffffffffffffffff811661086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161029f565b61087681610897565b50565b6000600154610887836102e4565b6108919190610bf8565b92915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561091e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561096657600080fd5b813567ffffffffffffffff8082111561097e57600080fd5b818401915084601f83011261099257600080fd5b8135818111156109a4576109a4610925565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156109ea576109ea610925565b81604052828152876020848701011115610a0357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610a3557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a5957600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ac757610ac7610a60565b500290565b600181815b80851115610b2557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610b0b57610b0b610a60565b80851615610b1857918102915b93841c9390800290610ad1565b509250929050565b600082610b3c57506001610891565b81610b4957506000610891565b8160018114610b5f5760028114610b6957610b85565b6001915050610891565b60ff841115610b7a57610b7a610a60565b50506001821b610891565b5060208310610133831016604e8410600b8410161715610ba8575081810a610891565b610bb28383610acc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610be457610be4610a60565b029392505050565b6000610a598383610b2d565b600082610c2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610c7557610c75610a60565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610cac57610cac610a60565b506001019056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000010": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000dbd71249fe60c9f9bf581b3594734e295eafa9b2", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000004200000000000000000000000000000000000007" + }, + "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d0f565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610d80565b610126565b61007f61010b366004610e18565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610e9b565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a32565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610e9b565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f08565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610a57565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f08565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610e9b565b9050606073ffffffffffffffffffffffffffffffffffffffff891673420000000000000000000000000000000000000614156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401610f9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610994565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109149084908c908c908c908c908b908b90602401610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001546109b89073ffffffffffffffffffffffffffffffffffffffff168683610a57565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f08565b6000610a3d83610ae8565b8015610a4e5750610a4e8383610b4c565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610ab190869085908790600401611016565b600060405180830381600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050505050565b6000610b14827f01ffc9a700000000000000000000000000000000000000000000000000000000610b4c565b8015610a515750610b45827fffffffff00000000000000000000000000000000000000000000000000000000610b4c565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c06908690611092565b6000604051808303818686fa925050503d8060008114610c42576040519150601f19603f3d011682016040523d82523d6000602084013e610c47565b606091505b5091509150602081511015610c625760009350505050610a51565b818015610c7e575080806020019051810190610c7e91906110ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b50565b803563ffffffff81168114610cc157600080fd5b919050565b60008083601f840112610cd857600080fd5b50813567ffffffffffffffff811115610cf057600080fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600080600080600060808688031215610d2757600080fd5b8535610d3281610c88565b945060208601359350610d4760408701610cad565b9250606086013567ffffffffffffffff811115610d6357600080fd5b610d6f88828901610cc6565b969995985093965092949392505050565b600080600080600080600060c0888a031215610d9b57600080fd5b8735610da681610c88565b96506020880135610db681610c88565b95506040880135610dc681610c88565b94506060880135610dd681610c88565b93506080880135925060a088013567ffffffffffffffff811115610df957600080fd5b610e058a828b01610cc6565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e3157600080fd5b8635610e3c81610c88565b95506020870135610e4c81610c88565b945060408701359350610e6160608801610cad565b9250608087013567ffffffffffffffff811115610e7d57600080fd5b610e8989828a01610cc6565b979a9699509497509295939492505050565b600060208284031215610ead57600080fd5b8151610eb881610c88565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610c7e606083018486610ebf565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610f8e60c083018486610ebf565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152610fdb608083018486610ebf565b979650505050505050565b60005b83811015611001578181015183820152602001610fe9565b83811115611010576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260008351806060840152611051816080850160208801610fe6565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b600082516110a4818460208701610fe6565b9190910192915050565b6000602082840312156110c057600080fd5b81518015158114610eb857600080fdfea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000011": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000122816e7a7aeb40601d0ac0dcaa8402f7aa4cdfa" + }, + "code": "0x6080604052600436106100385760003560e01c80633ccfd60b14610044578063d3e5792b1461005b578063d4ff92181461008a57600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100596100dc565b005b34801561006757600080fd5b5061007767d02ab486cedc000081565b6040519081526020015b60405180910390f35b34801561009657600080fd5b506000546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610081565b67d02ab486cedc000047101561019e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605760248201527f4f564d5f53657175656e6365724665655661756c743a2077697468647261776160448201527f6c20616d6f756e74206d7573742062652067726561746572207468616e206d6960648201527f6e696d756d207769746864726177616c20616d6f756e74000000000000000000608482015260a40160405180910390fd5b600080546040805160208101825283815290517fa3a795480000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109363a3a7954893610230937342000000000000000000000000000000000000069373ffffffffffffffffffffffffffffffffffffffff909216924792909190600401610264565b600060405180830381600087803b15801561024a57600080fd5b505af115801561025e573d6000803e3d6000fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835260208188168185015286604085015263ffffffff8616606085015260a06080850152845191508160a085015260005b828110156102cb5785810182015185820160c0015281016102af565b828111156102dd57600060c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c001969550505050505056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000012": { + "balance": "00", + "storage": {}, + "code": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630769a96914610030575b600080fd5b61004361003e366004610262565b610045565b005b73ffffffffffffffffffffffffffffffffffffffff84166100c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d7573742070726f76696465204c3120746f6b656e2061646472657373000000604482015260640160405180910390fd5b6000734200000000000000000000000000000000000010858585856040516100ed9061017b565b6100fb959493929190610375565b604051809103906000f080158015610117573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a35050505050565b6113fd806103d783390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126101c857600080fd5b813567ffffffffffffffff808211156101e3576101e3610188565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561022957610229610188565b8160405283815286602085880101111561024257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561027857600080fd5b843573ffffffffffffffffffffffffffffffffffffffff8116811461029c57600080fd5b9350602085013567ffffffffffffffff808211156102b957600080fd5b6102c5888389016101b7565b945060408701359150808211156102db57600080fd5b506102e8878288016101b7565b925050606085013560ff811681146102ff57600080fd5b939692955090935050565b6000815180845260005b8181101561033057602081850181015186830182015201610314565b81811115610342576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526103ae60a083018661030a565b82810360608401526103c0818661030a565b91505060ff83166080830152969550505050505056fe60a06040523480156200001157600080fd5b50604051620013fd380380620013fd833981016040819052620000349162000234565b8251839083906200004d906003906020850190620000a4565b50805162000063906004906020840190620000a4565b5050600580546001600160a01b039687166001600160a01b0319918216179091556006805497909616961695909517909355505060ff16608052506200031d565b828054620000b290620002e0565b90600052602060002090601f016020900481019282620000d6576000855562000121565b82601f10620000f157805160ff191683800117855562000121565b8280016001018555821562000121579182015b828111156200012157825182559160200191906001019062000104565b506200012f92915062000133565b5090565b5b808211156200012f576000815560010162000134565b80516001600160a01b03811681146200016257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018f57600080fd5b81516001600160401b0380821115620001ac57620001ac62000167565b604051601f8301601f19908116603f01168101908282118183101715620001d757620001d762000167565b81604052838152602092508683858801011115620001f457600080fd5b600091505b83821015620002185785820183015181830184015290820190620001f9565b838211156200022a5760008385830101525b9695505050505050565b600080600080600060a086880312156200024d57600080fd5b62000258866200014a565b945062000268602087016200014a565b60408701519094506001600160401b03808211156200028657600080fd5b6200029489838a016200017d565b94506060880151915080821115620002ab57600080fd5b50620002ba888289016200017d565b925050608086015160ff81168114620002d257600080fd5b809150509295509295909350565b600181811c90821680620002f557607f821691505b602082108114156200031757634e487b7160e01b600052602260045260246000fd5b50919050565b6080516110c462000339600039600061018101526110c46000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610237578063ae1f6aaf1461024a578063c01e1bd61461028f578063dd62ed3e146102af57600080fd5b806370a08231146101d357806395d89b41146102095780639dc29fac14610211578063a457c2d71461022457600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a57806339509351146101ab57806340c10f19146101be57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610e6c565b6102f5565b60405190151581526020015b60405180910390f35b6101356103b5565b6040516101249190610eb5565b610118610150366004610f51565b610447565b6002545b604051908152602001610124565b610118610175366004610f7b565b61045d565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610124565b6101186101b9366004610f51565b61052e565b6101d16101cc366004610f51565b610577565b005b6101596101e1366004610fb7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561063c565b6101d161021f366004610f51565b61064b565b610118610232366004610f51565b610704565b610118610245366004610f51565b6107c2565b60065461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b60055461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101596102bd366004610fd2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a70000000000000000000000000000000000000000000000000000000014806103ad57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103c490611005565b80601f01602080910402602001604051908101604052809291908181526020018280546103f090611005565b801561043d5780601f106104125761010080835404028352916020019161043d565b820191906000526020600020905b81548152906001019060200180831161042057829003601f168201915b5050505050905090565b60006104543384846107cf565b50600192915050565b600061046a84848461094f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052385338584036107cf565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610572908690611088565b6107cf565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105de5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6105e88282610bb5565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161063091815260200190565b60405180910390a25050565b6060600480546103c490611005565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106b25760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6106bc8282610cbb565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161063091815260200190565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161050d565b6107b833858584036107cf565b5060019392505050565b600061045433848461094f565b73ffffffffffffffffffffffffffffffffffffffff83166108575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff82166108e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff8216610a615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b41908490611088565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba791815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610c185760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161050d565b8060026000828254610c2a9190611088565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610c64908490611088565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610de05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610e1c9084906110a0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610942565b600060208284031215610e7e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610eae57600080fd5b9392505050565b600060208083528351808285015260005b81811015610ee257858101830151858201604001528201610ec6565b81811115610ef4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4c57600080fd5b919050565b60008060408385031215610f6457600080fd5b610f6d83610f28565b946020939093013593505050565b600080600060608486031215610f9057600080fd5b610f9984610f28565b9250610fa760208501610f28565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610eae82610f28565b60008060408385031215610fe557600080fd5b610fee83610f28565b9150610ffc60208401610f28565b90509250929050565b600181811c9082168061101957607f821691505b60208210811415611053577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561109b5761109b611059565b500190565b6000828210156110b2576110b2611059565b50039056fea164736f6c6343000809000aa164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000013": { + "balance": "00", + "storage": {}, + "code": "0x4B60005260206000F3" + }, + "0x4200000000000000000000000000000000000006": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000004200000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x457468657200000000000000000000000000000000000000000000000000000a", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x4554480000000000000000000000000000000000000000000000000000000006" + }, + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610237578063ae1f6aaf1461024a578063c01e1bd61461028f578063dd62ed3e146102af57600080fd5b806370a08231146101d357806395d89b41146102095780639dc29fac14610211578063a457c2d71461022457600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a57806339509351146101ab57806340c10f19146101be57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610c8f565b6102f5565b60405190151581526020015b60405180910390f35b6101356103b5565b6040516101249190610cd8565b610118610150366004610d74565b610447565b6002545b604051908152602001610124565b610118610175366004610d9e565b6104fd565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610124565b6101186101b9366004610d74565b6105ae565b6101d16101cc366004610d74565b61065f565b005b6101596101e1366004610dda565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561073e565b6101d161021f366004610d74565b61074d565b610118610232366004610d74565b610820565b610118610245366004610d74565b6108d1565b60065461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b60055461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101596102bd366004610df5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a70000000000000000000000000000000000000000000000000000000014806103ad57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103c490610e28565b80601f01602080910402602001604051908101604052809291908181526020018280546103f090610e28565b801561043d5780601f106104125761010080835404028352916020019161043d565b820191906000526020600020905b81548152906001019060200180831161042057829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4f564d5f4554483a20617070726f76652069732064697361626c65642070656e60448201527f64696e67206675727468657220636f6d6d756e6974792064697363757373696f60648201527f6e2e000000000000000000000000000000000000000000000000000000000000608482015260009060a4015b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f564d5f4554483a207472616e7366657246726f6d2069732064697361626c6560448201527f642070656e64696e67206675727468657220636f6d6d756e697479206469736360648201527f757373696f6e2e00000000000000000000000000000000000000000000000000608482015260009060a4016104f4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4f564d5f4554483a20696e637265617365416c6c6f77616e636520697320646960448201527f7361626c65642070656e64696e67206675727468657220636f6d6d756e69747960648201527f2064697363757373696f6e2e0000000000000000000000000000000000000000608482015260009060a4016104f4565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104f4565b6106ea8282610982565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161073291815260200190565b60405180910390a25050565b6060600480546103c490610e28565b60065473ffffffffffffffffffffffffffffffffffffffff1633146107ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104f4565b6107d88282610aa2565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161073291815260200190565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4f564d5f4554483a206465637265617365416c6c6f77616e636520697320646960448201527f7361626c65642070656e64696e67206675727468657220636f6d6d756e69747960648201527f2064697363757373696f6e2e0000000000000000000000000000000000000000608482015260009060a4016104f4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f564d5f4554483a207472616e736665722069732064697361626c656420706560448201527f6e64696e67206675727468657220636f6d6d756e69747920646973637573736960648201527f6f6e2e0000000000000000000000000000000000000000000000000000000000608482015260009060a4016104f4565b73ffffffffffffffffffffffffffffffffffffffff82166109ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104f4565b8060026000828254610a119190610eab565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610a4b908490610eab565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104f4565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104f4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c37908490610ec3565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208284031215610ca157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cd157600080fd5b9392505050565b600060208083528351808285015260005b81811015610d0557858101830151858201604001528201610ce9565b81811115610d17576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d6f57600080fd5b919050565b60008060408385031215610d8757600080fd5b610d9083610d4b565b946020939093013593505050565b600080600060608486031215610db357600080fd5b610dbc84610d4b565b9250610dca60208501610d4b565b9150604084013590509250925092565b600060208284031215610dec57600080fd5b610cd182610d4b565b60008060408385031215610e0857600080fd5b610e1183610d4b565b9150610e1f60208401610d4b565b90509250929050565b600181811c90821680610e3c57607f821691505b60208210811415610e76577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ebe57610ebe610e7c565b500190565b600082821015610ed557610ed5610e7c565b50039056fea164736f6c6343000809000a" + }, + "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x577261707065642045746865720000000000000000000000000000000000001a", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x5745544800000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000012" + }, + "code": "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158208c8d5eb81396ab38071a6f1e1993fa1d9a8c68b0bb30b6fabe5951e251fc82ac64736f6c63430005110032" + }, + "0x4200000000000000000000000000000000000020": { + "balance": "00", + "storage": { + "0x3260c767fcfbc5a878cdd765d557c2dc0ec469dd5a59ab1a2625587d230ef95f": "0x122816e7A7AeB40601d0aC0DCAA8402F7aa4cDfA", + "0x77c70ab2411972e3fdfbab35b6ae1519d867baa21725dd08c381964443dcc9aa": "0x4200000000000000000000000000000000000021", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000122816e7a7aeb40601d0ac0dcaa8402f7aa4cdfa", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" + }, + "code": "0x6080604052600436106100345760003560e01c806312762d5e1461003e57806347fc822f146100b5578063f1739cae146100d5575b61003c6100f5565b005b34801561004a57600080fd5b5061008c6100593660046104f7565b805160208183018101805160008252928201919093012091525473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c157600080fd5b5061003c6100d03660046105c6565b6102a7565b3480156100e157600080fd5b5061003c6100f03660046105c6565b610397565b6040517f70726f78794f776e65720000000000000000000000000000000000000000000081526000908190600a019081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff1614156101dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5461726765742061646472657373206d75737420626520696e697469616c697a60448201527f65642e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000806000604051610211907f70726f78795461726765740000000000000000000000000000000000000000008152600b0190565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff1690610246906000903690610603565b600060405180830381855af49150503d8060008114610281576040519150601f19603f3d011682016040523d82523d6000602084013e610286565b606091505b5090925090506001821515141561029f57805160208201f35b805160208201fd5b6040517f70726f78794f776e6572000000000000000000000000000000000000000000008152600090600a01908152604051908190036020019020543373ffffffffffffffffffffffffffffffffffffffff909116141561038c57806000604051610335907f70726f78795461726765740000000000000000000000000000000000000000008152600b0190565b908152604051908190036020019020805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905550565b6103946100f5565b50565b6040517f70726f78794f776e6572000000000000000000000000000000000000000000008152600090600a01908152604051908190036020019020543373ffffffffffffffffffffffffffffffffffffffff909116141561038c5773ffffffffffffffffffffffffffffffffffffffff8116610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646460448201527f726573732e00000000000000000000000000000000000000000000000000000060648201526084016101d3565b806000604051610335907f70726f78794f776e6572000000000000000000000000000000000000000000008152600a0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561050957600080fd5b813567ffffffffffffffff8082111561052157600080fd5b818401915084601f83011261053557600080fd5b813581811115610547576105476104c8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561058d5761058d6104c8565b816040528281528760208487010111156105a657600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156105d857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000021": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000122816e7a7aeb40601d0ac0dcaa8402f7aa4cdfa", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" + }, + "code": "0x608060405234801561001057600080fd5b50600436106100c85760003560e01c80638da5cb5b11610081578063f2fde38b1161005b578063f2fde38b146101b2578063f7cd3be8146101c5578063fd892278146101d857600080fd5b80638da5cb5b14610176578063a52b962d14610196578063e24dfcde146101a957600080fd5b80630ceff204116100b25780630ceff2041461010957806335d6eac41461011e578063853383921461013157600080fd5b8062292526146100cd57806309da3981146100e9575b600080fd5b6100d660045481565b6040519081526020015b60405180910390f35b6100d66100f7366004610f60565b60016020526000908152604090205481565b61011c610117366004610f7b565b6101eb565b005b61011c61012c366004610f60565b6103d2565b6002546101519073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e0565b6000546101519073ffffffffffffffffffffffffffffffffffffffff1681565b6100d66101a4366004610f60565b610507565b6100d660035481565b61011c6101c0366004610f60565b610594565b61011c6101d3366004610f7b565b6106bc565b61011c6101e6366004610f94565b610749565b60005473ffffffffffffffffffffffffffffffffffffffff16331480610227575060005473ffffffffffffffffffffffffffffffffffffffff16155b6102785760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff166103035760405162461bcd60e51b815260206004820152602560248201527f436f6e747261637420686173206e6f7420796574206265656e20696e6974696160448201527f6c697a6564000000000000000000000000000000000000000000000000000000606482015260840161026f565b6004548111156103555760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420416d6f756e74000000000000000000000000000000000000604482015260640161026f565b80600460008282546103679190610fef565b909155505060408051338152602081018390527f447d53be88e315476bdbe2e63cef309461f6305d09aada67641c29e6b897e301910160405180910390a16000546002546103cf9173ffffffffffffffffffffffffffffffffffffffff91821691168361099d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633148061040e575060005473ffffffffffffffffffffffffffffffffffffffff16155b61045a5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015260640161026f565b60025473ffffffffffffffffffffffffffffffffffffffff16156104c05760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420686173206265656e20696e697469616c697a6564000000604482015260640161026f565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006003546000141561055c5760405162461bcd60e51b815260206004820152601060248201527f556e6c696d697465642063726564697400000000000000000000000000000000604482015260640161026f565b60035473ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205461058e91610a76565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314806105d0575060005473ffffffffffffffffffffffffffffffffffffffff16155b61061c5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015260640161026f565b73ffffffffffffffffffffffffffffffffffffffff811661063c57600080fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040805133815260208101929092527f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c910160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314806106f8575060005473ffffffffffffffffffffffffffffffffffffffff16155b6107445760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015260640161026f565b600355565b60025473ffffffffffffffffffffffffffffffffffffffff166107d45760405162461bcd60e51b815260206004820152602560248201527f436f6e747261637420686173206e6f7420796574206265656e20696e6974696160448201527f6c697a6564000000000000000000000000000000000000000000000000000000606482015260840161026f565b816108215760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e74000000000000000000000000000000000000604482015260640161026f565b803b61086f5760405162461bcd60e51b815260206004820152600e60248201527f4164647265737320697320454f41000000000000000000000000000000000000604482015260640161026f565b610899817f2f7adf4300000000000000000000000000000000000000000000000000000000610a89565b6108e55760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642048656c70657220436f6e7472616374000000000000000000604482015260640161026f565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120805484929061091a908490611006565b9091555050604080513381526020810184905273ffffffffffffffffffffffffffffffffffffffff83168183015290517f63611f4b2e0fff4acd8e17bd95ebb62a3bc834c76cf85e7a972a502990b6257a9181900360600190a16002546109999073ffffffffffffffffffffffffffffffffffffffff16333085610aa5565b5050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610b09565b505050565b6000610a82828461101e565b9392505050565b6000610a9483610bfb565b8015610a825750610a828383610c5f565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610b039085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016109ef565b50505050565b6000610b6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610d9b9092919063ffffffff16565b805190915015610a715780806020019051810190610b899190611059565b610a715760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161026f565b6000610c27827f01ffc9a700000000000000000000000000000000000000000000000000000000610c5f565b801561058e5750610c58827fffffffff00000000000000000000000000000000000000000000000000000000610c5f565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610d199086906110a7565b6000604051808303818686fa925050503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150602081511015610d75576000935050505061058e565b818015610d91575080806020019051810190610d919190611059565b9695505050505050565b6060610daa8484600085610db2565b949350505050565b606082471015610e2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161026f565b843b610e785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161026f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610ea191906110a7565b60006040518083038185875af1925050503d8060008114610ede576040519150601f19603f3d011682016040523d82523d6000602084013e610ee3565b606091505b5091509150610ef3828286610efe565b979650505050505050565b60608315610f0d575081610a82565b825115610f1d5782518084602001fd5b8160405162461bcd60e51b815260040161026f91906110c3565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f5b57600080fd5b919050565b600060208284031215610f7257600080fd5b610a8282610f37565b600060208284031215610f8d57600080fd5b5035919050565b60008060408385031215610fa757600080fd5b82359150610fb760208401610f37565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561100157611001610fc0565b500390565b6000821982111561101957611019610fc0565b500190565b600082611054577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561106b57600080fd5b81518015158114610a8257600080fd5b60005b8381101561109657818101518382015260200161107e565b83811115610b035750506000910152565b600082516110b981846020870161107b565b9190910192915050565b60208152600082518060208401526110e281604085016020870161107b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000022": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x122816e7A7AeB40601d0aC0DCAA8402F7aa4cDfA", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x4200000000000000000000000000000000000022" + }, + "code": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a432ee271161008c578063cbcd0c2c11610066578063cbcd0c2c146101d3578063e86f18991461014d578063f2f3fa07146101e6578063f2fde38b1461020957600080fd5b8063a432ee27146101a5578063aadebcb9146101b8578063b8d16056146101cb57600080fd5b8063493d57d6116100c8578063493d57d61461014d578063715018a6146101605780637d93616c1461016a5780638da5cb5b1461017d57600080fd5b806301ffc9a7146100ef5780632f7adf431461011757806345ff812a14610137575b600080fd5b6101026100fd366004611048565b61021c565b60405190151581526020015b60405180910390f35b61012a6101253660046111ab565b6102dc565b60405161010e9190611289565b61013f6104a8565b60405190815260200161010e565b61013f61015b3660046112b0565b6105fa565b6101686106aa565b005b61012a6101783660046112da565b61071d565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b6101686101b336600461134e565b61081f565b6101686101c636600461134e565b61090c565b61013f6109ef565b6101026101e136600461134e565b610b34565b6101026101f436600461134e565b60026020526000908152604090205460ff1681565b61016861021736600461134e565b610ba4565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f2f7adf43000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102d457507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b3360009081526002602052604090205460609060ff166103435760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642043616c6c657220416464726573730000000000000000000060448201526064015b60405180910390fd5b60008251116103945760405162461bcd60e51b815260206004820152601a60248201527f547572696e673a547572696e6754783a6e6f207061796c6f6164000000000000604482015260640161033a565b600180546040517f7d93616c00000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff90921691637d93616c916103f1919088908890600401611384565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261046591908101906113bf565b90507ffde6d9b9b674fe8a495a825379378eb214e03439d12f342ac5e8af9768c1d85c600182604051610499929190611436565b60405180910390a19392505050565b3360009081526002602052604081205460ff166105075760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642043616c6c6572204164647265737300000000000000000000604482015260640161033a565b600180546040517f493d57d600000000000000000000000000000000000000000000000000000000815260048101929092526000602483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063493d57d690604401602060405180830381600087803b15801561057f57600080fd5b505af1158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b7919061144f565b6040805160018152602081018390529192507f450d62889c3a6e19c9586840ce9c21040b90d81950fe31f2ba982090adaf53e891015b60405180910390a1905090565b60003330146106715760405162461bcd60e51b815260206004820152602e60248201527f547572696e673a476574526573706f6e73653a6d73672e73656e64657220213d60448201527f2061646472657373287468697329000000000000000000000000000000000000606482015260840161033a565b8263ffffffff1660021461068484610ca0565b906106a25760405162461bcd60e51b815260040161033a9190611289565b509092915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161033a565b61071b6000610fd3565b565b60603330146107945760405162461bcd60e51b815260206004820152602e60248201527f547572696e673a476574526573706f6e73653a6d73672e73656e64657220213d60448201527f2061646472657373287468697329000000000000000000000000000000000000606482015260840161033a565b60008251116107e55760405162461bcd60e51b815260206004820152601d60248201527f547572696e673a476574526573706f6e73653a6e6f207061796c6f6164000000604482015260640161033a565b8363ffffffff166002146107f885610ca0565b906108165760405162461bcd60e51b815260040161033a9190611289565b50909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161033a565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f9ce84a7ab8065f5f6f23c19be05400b2edbabf71e4b29837f56a016c951b97d291015b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161033a565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527feacddceebef9fdf16961c5dba55871a098bd93be9160335139bdeb226537c6ed9101610901565b3360009081526002602052604081205460ff16610a4e5760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642043616c6c6572204164647265737300000000000000000000604482015260640161033a565b6001546040517fe86f189900000000000000000000000000000000000000000000000000000000815260026004820152602a602482015260009173ffffffffffffffffffffffffffffffffffffffff169063e86f189990604401602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa919061144f565b6040805160018152602081018390529192507fcf56007112ef7f986f258f82114b449a536da425cefac3982f64e306b07c792191016105ed565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832054815194855260ff1680151592850192909252919290917fabf082f4a354a0ea137bf1c9b0f6660d1340b3f84e293fb4a4cb01c7602c3962910160405180910390a192915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161033a565b73ffffffffffffffffffffffffffffffffffffffff8116610c945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161033a565b610c9d81610fd3565b50565b60608163ffffffff1660011415610cea57505060408051808201909152601e81527f545552494e473a204765746820696e74657263657074206661696c7572650000602082015290565b8163ffffffff16600a1415610d3257505060408051808201909152601d81527f545552494e473a20496e636f727265637420696e707574207374617465000000602082015290565b8163ffffffff16600b1415610d7a57505060408051808201909152601a81527f545552494e473a2043616c6c6461746120746f6f2073686f7274000000000000602082015290565b8163ffffffff16600c1415610dc257505060408051808201909152601581527f545552494e473a2055524c203e36342062797465730000000000000000000000602082015290565b8163ffffffff16600d1415610e0a57505060408051808201909152601481527f545552494e473a20536572766572206572726f72000000000000000000000000602082015290565b8163ffffffff16600e1415610e38576040518060600160405280602881526020016114696028913992915050565b8163ffffffff16600f1415610e66576040518060600160405280602381526020016114916023913992915050565b8163ffffffff1660101415610eae57505060408051808201909152601381527f545552494e473a20524e47206661696c75726500000000000000000000000000602082015290565b8163ffffffff1660111415610ef657505060408051808201909152601f81527f545552494e473a2041504920526573706f6e7365203e33323220636861727300602082015290565b8163ffffffff1660121415610f3e57505060408051808201909152601f81527f545552494e473a2041504920526573706f6e7365203e31363020627974657300602082015290565b8163ffffffff1660131415610f8657505060408051808201909152601b81527f545552494e473a20496e73756666696369656e74206372656469740000000000602082015290565b8163ffffffff1660141415610fce57505060408051808201909152601b81527f545552494e473a204d697373696e6720636163686520656e7472790000000000602082015290565b919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561105a57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108a57600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561110757611107611091565b604052919050565b600067ffffffffffffffff82111561112957611129611091565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261116657600080fd5b81356111796111748261110f565b6110c0565b81815284602083860101111561118e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111be57600080fd5b823567ffffffffffffffff808211156111d657600080fd5b6111e286838701611155565b935060208501359150808211156111f857600080fd5b5061120585828601611155565b9150509250929050565b60005b8381101561122a578181015183820152602001611212565b83811115611239576000848401525b50505050565b6000815180845261125781602086016020860161120f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061108a602083018461123f565b803563ffffffff81168114610fce57600080fd5b600080604083850312156112c357600080fd5b6112cc8361129c565b946020939093013593505050565b6000806000606084860312156112ef57600080fd5b6112f88461129c565b9250602084013567ffffffffffffffff8082111561131557600080fd5b61132187838801611155565b9350604086013591508082111561133757600080fd5b5061134486828701611155565b9150509250925092565b60006020828403121561136057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461108a57600080fd5b63ffffffff841681526060602082015260006113a3606083018561123f565b82810360408401526113b5818561123f565b9695505050505050565b6000602082840312156113d157600080fd5b815167ffffffffffffffff8111156113e857600080fd5b8201601f810184136113f957600080fd5b80516114076111748261110f565b81815285602083850101111561141c57600080fd5b61142d82602083016020860161120f565b95945050505050565b8281526040602082015260006102d4604083018461123f565b60006020828403121561146157600080fd5b505191905056fe545552494e473a20436f756c64206e6f74206465636f64652073657276657220726573706f6e7365545552494e473a20436f756c64206e6f74206372656174652072706320636c69656e74a164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000023": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x426f6261204e6574776f726b0000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x424f424100000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000eccd355862591cbb4bb7e7dd55072070ee3d0fc1", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000004200000000000000000000000000000000000010" + }, + "code": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ecebe001161010f578063b4b5ea57116100a2578063d505accf11610071578063d505accf14610479578063d5abeb011461048c578063dd62ed3e146104cc578063f1127ed81461050557600080fd5b8063b4b5ea5714610438578063c01e1bd61461044b578063c3cda5201461045e578063ce665dd81461047157600080fd5b80639dc29fac116100de5780639dc29fac146103ec578063a457c2d7146103ff578063a9059cbb14610412578063ae1f6aaf1461042557600080fd5b80637ecebe00146103ab5780638e539e8c146103be57806395d89b41146103d15780639ab24eb0146103d957600080fd5b806339509351116101875780635c19a95c116101565780635c19a95c146103175780636fcfff451461032a57806370a0823114610352578063782d6fe11461037b57600080fd5b806339509351146102985780633a46b1a8146102ab57806340c10f19146102be578063587cde1e146102d357600080fd5b806318160ddd116101c357806318160ddd1461023a57806323b872dd1461024c578063313ce5671461025f5780633644e5151461029057600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063095ea7b314610227575b600080fd5b6101fd6101f8366004612153565b610557565b60405190151581526020015b60405180910390f35b61021a610617565b6040516102099190612195565b6101fd610235366004612224565b6106a9565b6002545b604051908152602001610209565b6101fd61025a36600461224e565b6106bf565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000012168152602001610209565b61023e610783565b6101fd6102a6366004612224565b610792565b61023e6102b9366004612224565b6107ce565b6102d16102cc366004612224565b610848565b005b6102ff6102e136600461228a565b6001600160a01b039081166000908152600660205260409020541690565b6040516001600160a01b039091168152602001610209565b6102d161032536600461228a565b6108f3565b61033d61033836600461228a565b610900565b60405163ffffffff9091168152602001610209565b61023e61036036600461228a565b6001600160a01b031660009081526020819052604090205490565b61038e610389366004612224565b610928565b6040516bffffffffffffffffffffffff9091168152602001610209565b61023e6103b936600461228a565b61093c565b61023e6103cc3660046122a5565b61095a565b61021a6109b6565b61023e6103e736600461228a565b6109c5565b6102d16103fa366004612224565b610a76565b6101fd61040d366004612224565b610b15565b6101fd610420366004612224565b610bc6565b600a546102ff906001600160a01b031681565b61038e61044636600461228a565b610bd3565b6009546102ff906001600160a01b031681565b6102d161046c3660046122cf565b610be1565b61023e600081565b6102d1610487366004612327565b610d17565b61049f6b019d971e4fe8401e7400000081565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091168152602001610209565b61023e6104da366004612391565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105186105133660046123c4565b610e7b565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169281019290925201610209565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a700000000000000000000000000000000000000000000000000000000148061060f57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b60606003805461062690612404565b80601f016020809104026020016040519081016040528092919081815260200182805461065290612404565b801561069f5780601f106106745761010080835404028352916020019161069f565b820191906000526020600020905b81548152906001019060200180831161068257829003601f168201915b5050505050905090565b60006106b6338484610f14565b50600192915050565b60006106cc84848461106c565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561076b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107788533858403610f14565b506001949350505050565b600061078d61128f565b905090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106b69185906107c9908690612481565b610f14565b600043821061081f5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610762565b6001600160a01b03831660009081526007602052604090206108419083611398565b9392505050565b600a546001600160a01b031633146108a25760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e6044820152606401610762565b6108ac828261148c565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516108e791815260200190565b60405180910390a25050565b6108fd338261149a565b50565b6001600160a01b0381166000908152600760205260408120546109229061152b565b92915050565b600061084161093784846107ce565b6115ab565b6001600160a01b038116600090815260056020526040812054610922565b60004382106109ab5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610762565b610922600883611398565b60606004805461062690612404565b6001600160a01b0381166000908152600760205260408120548015610a4e576001600160a01b0383166000908152600760205260409020610a07600183612499565b81548110610a1757610a176124b0565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610a51565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b600a546001600160a01b03163314610ad05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e6044820152606401610762565b610ada828261162f565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516108e791815260200190565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610baf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610762565b610bbc3385858403610f14565b5060019392505050565b60006106b633848461106c565b6000610922610937836109c5565b83421115610c315760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610762565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610cab90610ca39060a00160405160208183030381529060405280519060200120611639565b8585856116a2565b9050610cb6816116ca565b8614610d045760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610762565b610d0e818861149a565b50505050505050565b83421115610d675760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610762565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610d968c6116ca565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610df182611639565b90506000610e01828787876116a2565b9050896001600160a01b0316816001600160a01b031614610e645760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610762565b610e6f8a8a8a610f14565b50505050505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152600760205260409020805463ffffffff8416908110610ebf57610ebf6124b0565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b6001600160a01b038316610f8f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b03821661100b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0382166111645760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b038316600090815260208190526040902054818110156111f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061122a908490612481565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161127691815260200190565b60405180910390a36112898484846116f7565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000b484614156112de57507fabb789ec54971db3e823708fd9431c9210b226e34a824ee95256debcb00403e190565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f23ef304bd30f48f152c27dd887ad56e5efbd0d565372442edf0886603c005273828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060830152610b48608083015273420000000000000000000000000000000000002360a0808401919091528351808403909101815260c0909201909252805191012090565b60006113a48183612481565b835490925060005b818110156114095760006113c08284611702565b9050848682815481106113d5576113d56124b0565b60009182526020909120015463ffffffff1611156113f557809250611403565b611400816001612481565b91505b506113ac565b8115611462578461141b600184612499565b8154811061142b5761142b6124b0565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611465565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b611496828261171d565b5050565b6001600160a01b038281166000818152600660208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46112898284836117b9565b600063ffffffff8211156115a75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610762565b5090565b60006bffffffffffffffffffffffff8211156115a75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610762565b61149682826118f6565b600061092261164661128f565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006116b38787878761190e565b915091506116c081611a19565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b505050565b6116f2838383611c0a565b600061171160028484186124df565b61084190848416612481565b6117278282611c3c565b6002546b019d971e4fe8401e7400000010156117ab5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610762565b6112896008611d2383611d2f565b816001600160a01b0316836001600160a01b0316141580156117db5750600081115b156116f2576001600160a01b03831615611869576001600160a01b0383166000908152600760205260408120819061181690611f2785611d2f565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161185e929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156116f2576001600160a01b0382166000908152600760205260408120819061189f90611d2385611d2f565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516118e7929190918252602082015260400190565b60405180910390a25050505050565b6119008282611f33565b6112896008611f2783611d2f565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156119455750600090506003611a10565b8460ff16601b1415801561195d57508460ff16601c14155b1561196e5750600090506004611a10565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156119c2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611a0957600060019250925050611a10565b9150600090505b94509492505050565b6000816004811115611a2d57611a2d61251a565b1415611a365750565b6001816004811115611a4a57611a4a61251a565b1415611a985760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610762565b6002816004811115611aac57611aac61251a565b1415611afa5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610762565b6003816004811115611b0e57611b0e61251a565b1415611b825760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610762565b6004816004811115611b9657611b9661251a565b14156108fd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b038381166000908152600660205260408082205485841683529120546116f2929182169116836117b9565b6001600160a01b038216611c925760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610762565b8060026000828254611ca49190612481565b90915550506001600160a01b03821660009081526020819052604081208054839290611cd1908490612481565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611496600083836116f7565b60006108418284612481565b825460009081908015611d8f5785611d48600183612499565b81548110611d5857611d586124b0565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d92565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250611dc083858763ffffffff16565b9150600081118015611e085750611dd8600043612481565b86611de4600184612499565b81548110611df457611df46124b0565b60009182526020909120015463ffffffff16145b15611e9257611e16826120bf565b86611e22600184612499565b81548110611e3257611e326124b0565b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550611f1e565b856040518060400160405280611eb3600043611eae9190612481565b61152b565b63ffffffff168152602001611ec7856120bf565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006108418284612499565b6001600160a01b038216611faf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0382166000908152602081905260409020548181101561203e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b038316600090815260208190526040812083830390556002805484929061206d908490612499565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36116f2836000846116f7565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156115a75760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610762565b60006020828403121561216557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461084157600080fd5b600060208083528351808285015260005b818110156121c2578581018301518582016040015282016121a6565b818111156121d4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b80356001600160a01b038116811461221f57600080fd5b919050565b6000806040838503121561223757600080fd5b61224083612208565b946020939093013593505050565b60008060006060848603121561226357600080fd5b61226c84612208565b925061227a60208501612208565b9150604084013590509250925092565b60006020828403121561229c57600080fd5b61084182612208565b6000602082840312156122b757600080fd5b5035919050565b803560ff8116811461221f57600080fd5b60008060008060008060c087890312156122e857600080fd5b6122f187612208565b9550602087013594506040870135935061230d606088016122be565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561234257600080fd5b61234b88612208565b965061235960208901612208565b95506040880135945060608801359350612375608089016122be565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156123a457600080fd5b6123ad83612208565b91506123bb60208401612208565b90509250929050565b600080604083850312156123d757600080fd5b6123e083612208565b9150602083013563ffffffff811681146123f957600080fd5b809150509250929050565b600181811c9082168061241857607f821691505b602082108114156116ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561249457612494612452565b500190565b6000828210156124ab576124ab612452565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082612515577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000024": { + "balance": "00", + "storage": { + "0x3260c767fcfbc5a878cdd765d557c2dc0ec469dd5a59ab1a2625587d230ef95f": "0x122816e7A7AeB40601d0aC0DCAA8402F7aa4cDfA", + "0x77c70ab2411972e3fdfbab35b6ae1519d867baa21725dd08c381964443dcc9aa": "0x4200000000000000000000000000000000000025", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000b2780babbe5eaf6b611cacc5cf3db1c669224f60", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000122816e7a7aeb40601d0ac0dcaa8402f7aa4cdfa", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000004200000000000000000000000000000000000023", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x00000000000000000000000000000000000000000000000000000000000001f4", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000001388", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000000000000000000000000000000000000000007d0", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000420000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x00000000000000000000000000000000000000000000000029a2241af62c0000", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000011c37937e08000", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x00000000000000000000000000000000000000000000000000000000000007d0" + }, + "code": "0x6080604052600436106100345760003560e01c806312762d5e1461003e57806347fc822f146100b5578063f1739cae146100d5575b61003c6100f5565b005b34801561004a57600080fd5b5061008c6100593660046104f7565b805160208183018101805160008252928201919093012091525473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c157600080fd5b5061003c6100d03660046105c6565b6102a7565b3480156100e157600080fd5b5061003c6100f03660046105c6565b610397565b6040517f70726f78794f776e65720000000000000000000000000000000000000000000081526000908190600a019081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff1614156101dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5461726765742061646472657373206d75737420626520696e697469616c697a60448201527f65642e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000806000604051610211907f70726f78795461726765740000000000000000000000000000000000000000008152600b0190565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff1690610246906000903690610603565b600060405180830381855af49150503d8060008114610281576040519150601f19603f3d011682016040523d82523d6000602084013e610286565b606091505b5090925090506001821515141561029f57805160208201f35b805160208201fd5b6040517f70726f78794f776e6572000000000000000000000000000000000000000000008152600090600a01908152604051908190036020019020543373ffffffffffffffffffffffffffffffffffffffff909116141561038c57806000604051610335907f70726f78795461726765740000000000000000000000000000000000000000008152600b0190565b908152604051908190036020019020805473ffffffffffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905550565b6103946100f5565b50565b6040517f70726f78794f776e6572000000000000000000000000000000000000000000008152600090600a01908152604051908190036020019020543373ffffffffffffffffffffffffffffffffffffffff909116141561038c5773ffffffffffffffffffffffffffffffffffffffff8116610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646460448201527f726573732e00000000000000000000000000000000000000000000000000000060648201526084016101d3565b806000604051610335907f70726f78794f776e6572000000000000000000000000000000000000000000008152600a0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561050957600080fd5b813567ffffffffffffffff8082111561052157600080fd5b818401915084601f83011261053557600080fd5b813581811115610547576105476104c8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561058d5761058d6104c8565b816040528281528760208487010111156105a657600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156105d857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c6343000809000a" + }, + "0x4200000000000000000000000000000000000025": { + "balance": "00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000b2780babbe5eaf6b611cacc5cf3db1c669224f60", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000122816e7a7aeb40601d0ac0dcaa8402f7aa4cdfa", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000004200000000000000000000000000000000000023", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x00000000000000000000000000000000000000000000000000000000000001f4", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000001388", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000000000000000000000000000000000000000007d0", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000420000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x00000000000000000000000000000000000000000000000029a2241af62c0000", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000011c37937e08000", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x00000000000000000000000000000000000000000000000000000000000007d0" + }, + "code": "0x6080604052600436106101af5760003560e01c806389df963d116100ec578063d2e1fb221161008a578063e086e5ec11610064578063e086e5ec1461047b578063e3aea9ba14610490578063f25f4b56146104b0578063f2fde38b146104d057600080fd5b8063d2e1fb2214610432578063d3e5792b14610448578063d86732ef1461046557600080fd5b8063b54016dc116100c6578063b54016dc146103bc578063bc9bd6ee146103dc578063c8a05413146103fc578063cd0514ad1461041c57600080fd5b806389df963d146103695780638da5cb5b1461037e5780638fcfc8131461039c57600080fd5b806334fe1b16116101595780635b9da5c6116101335780635b9da5c6146102d35780636805491b146102f35780637728195c14610333578063872ea4991461035357600080fd5b806334fe1b1614610289578063438ac96c1461029e578063485cc955146102b357600080fd5b80631b6771991161018a5780631b6771991461021c57806323ec63201461023157806324b20eda1461025157600080fd5b80625c5fb2146101bb5780630aa2f420146101dd57806315a0c1ac1461020657600080fd5b366101b657005b600080fd5b3480156101c757600080fd5b506101db6101d63660046119d8565b6104f0565b005b3480156101e957600080fd5b506101f360055481565b6040519081526020015b60405180910390f35b34801561021257600080fd5b506101f3600a5481565b34801561022857600080fd5b506101db6105c7565b34801561023d57600080fd5b506101f361024c366004611a20565b6106da565b34801561025d57600080fd5b50600254610271906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b34801561029557600080fd5b506101db61078b565b3480156102aa57600080fd5b506101f361092d565b3480156102bf57600080fd5b506101db6102ce366004611b07565b610957565b3480156102df57600080fd5b506101db6102ee3660046119d8565b610a70565b3480156102ff57600080fd5b5061032361030e366004611b40565b60076020526000908152604090205460ff1681565b60405190151581526020016101fd565b34801561033f57600080fd5b50600654610271906001600160a01b031681565b34801561035f57600080fd5b506101f360085481565b34801561037557600080fd5b506101db610b27565b34801561038a57600080fd5b506000546001600160a01b0316610271565b3480156103a857600080fd5b506101db6103b7366004611b40565b610dd0565b3480156103c857600080fd5b506101db6103d7366004611b5d565b610f12565b3480156103e857600080fd5b506101db6103f7366004611bd4565b6111d4565b34801561040857600080fd5b506101db6104173660046119d8565b6112d2565b34801561042857600080fd5b506101f360095481565b34801561043e57600080fd5b506101f360045481565b34801561045457600080fd5b506101f3680821ab0d441498000081565b34801561047157600080fd5b506101f360035481565b34801561048757600080fd5b506101db61137f565b34801561049c57600080fd5b506101db6104ab3660046119d8565b6114d2565b3480156104bc57600080fd5b50600154610271906001600160a01b031681565b3480156104dc57600080fd5b506101db6104eb366004611b40565b611571565b6000546001600160a01b0316331461054f5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b60035481111580156105615750600081115b61056a57600080fd5b60048190557f680f379280fc8680df45c979a924c0084a250758604482cb01dadedbaa1c09c96105a26000546001600160a01b031690565b604080516001600160a01b03909216825260208201849052015b60405180910390a150565b333b156106165760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610546565b66071afd498d00003331101561066e5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610546565b3360008181526007602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f764389830e6a6b84f4ea3f2551a4c5afbb6dff806f2d8f571f6913c6c4b62a4091015b60405180910390a1565b6006546005546040517f49948e0e0000000000000000000000000000000000000000000000000000000081526000926001600160a01b0316919082906349948e0e9061072a908790600401611c6c565b60206040518083038186803b15801561074257600080fd5b505afa158015610756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077a9190611c7f565b6107849190611cc7565b9392505050565b333b156107da5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610546565b6002546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526729a2241af62c0000916001600160a01b0316906370a082319060240160206040518083038186803b15801561083e57600080fd5b505afa158015610852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108769190611c7f565b10156108c45760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420426f62612062616c616e6365000000000000006044820152606401610546565b3360008181526007602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527fd1787ba09c5383b33cf88983fbbf2e6ae348746a3a906e1a1bb67c729661a4ac91016106d0565b600061095260085461094c600a546009546116b990919063ffffffff16565b906116c5565b905090565b6001546001600160a01b0316156109b05760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420686173206265656e20696e697469616c697a65640000006044820152606401610546565b6001600160a01b038216158015906109d057506001600160a01b03811615155b6109d957600080fd5b600180546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600280549290931691811691909117909155600080548216331790556006805490911673420000000000000000000000000000000000000f1790556729a2241af62c00006008556113886003556107d060058190556101f4600455600a55565b6000546001600160a01b03163314610aca5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b66038d7ea4c6800081118015610ae65750662386f26fc1000081105b610aef57600080fd5b60098190557fdcb9e069a0d16a974c9c0f4a88e2c9b79df5c45d9721c26461043d51c44682076105a26000546001600160a01b031690565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152680821ab0d4414980000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b8c57600080fd5b505afa158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc49190611c7f565b1015610c5e5760405162461bcd60e51b815260206004820152605560248201527f426f62615f47617350726963654f7261636c653a207769746864726177616c2060448201527f616d6f756e74206d7573742062652067726561746572207468616e206d696e6960648201527f6d756d207769746864726177616c20616d6f756e740000000000000000000000608482015260a401610546565b6002546001546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527342000000000000000000000000000000000000109263a3a79548926001600160a01b039182169291169082906370a082319060240160206040518083038186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d169190611c7f565b6000604051806020016040528060008152506040518663ffffffff1660e01b8152600401610d48959493929190611d04565b600060405180830381600087803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b505050507f2c69c3957d9ca9782726f647b7a3592dd381f4370288551f5ed43fd3cc5b7753610dad6000546001600160a01b031690565b600154604080516001600160a01b039384168152929091166020830152016106d0565b6000546001600160a01b03163314610e2a5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b803b610e785760405162461bcd60e51b815260206004820152600e60248201527f4163636f756e7420697320454f410000000000000000000000000000000000006044820152606401610546565b6001600160a01b038116610e8b57600080fd5b600680546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790557f226bf99888a1e70d41ce744b11ce2acd4d1d1b8cf4ad17a0e72e67acff4bf5a7610ef36000546001600160a01b031690565b604080516001600160a01b0392831681529184166020830152016105bc565b863b15610f615760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610546565b6001600160a01b0386163014610fb95760405162461bcd60e51b815260206004820152601c60248201527f5370656e646572206973206e6f74207468697320636f6e7472616374000000006044820152606401610546565b6000610fd860085461094c600a546009546116b990919063ffffffff16565b90508086101561102a5760405162461bcd60e51b815260206004820152601360248201527f56616c7565206973206e6f7420656e6f756768000000000000000000000000006044820152606401610546565b6002546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b038a811660048301528981166024830152604482018990526064820188905260ff8716608483015260a4820186905260c4820185905290911690819063d505accf9060e401600060405180830381600087803b1580156110b957600080fd5b505af11580156110cd573d6000803e3d6000fd5b50506002546110ea92506001600160a01b031690508a30856116d1565b6009546040516000916001600160a01b038c16918381818185875af1925050503d8060008114611136576040519150601f19603f3d011682016040523d82523d6000602084013e61113b565b606091505b505090508061118c5760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642045544800000000000000000000000000006044820152606401610546565b6040516001600160a01b038b1681527fb92b4b358dfa6e521f7f80a5d0522cf04a2082482701a0d78ff2bb615df646be9060200160405180910390a150505050505050505050565b6000546001600160a01b0316331461122e5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b600354821115801561124257506004548210155b61124b57600080fd5b600354811115801561125f57506004548110155b61126857600080fd5b6005829055600a8190557f23632bbb735dece542dac9735a2ba4253234eb119ce45cdf9968cbbe12aa67906112a56000546001600160a01b031690565b604080516001600160a01b0390921682526020820185905281018390526060015b60405180910390a15050565b6000546001600160a01b0316331461132c5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b600454811015801561133e5750600081115b61134757600080fd5b60038190557f7a28f69b71e51c4a30f620a2cfe4ce5aad2cd3fe5cc9647e400e252b65033d416105a26000546001600160a01b031690565b6000546001600160a01b031633146113d95760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b6001546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611426576040519150601f19603f3d011682016040523d82523d6000602084013e61142b565b606091505b505090508061147c5760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073656e642045544820746f206665652077616c6c65746044820152606401610546565b7f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce0266496114af6000546001600160a01b031690565b600154604080516001600160a01b039384168152929091166020830152016105bc565b6000546001600160a01b0316331461152c5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b6000811161153957600080fd5b60088190557f1071f61d642716391065a6f38aac12cdc6a436ca6a6622a18ae0530495738afc6105a26000546001600160a01b031690565b6000546001600160a01b031633146115cb5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610546565b6001600160a01b0381166116475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610546565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c91016112c6565b60006107848284611cc7565b60006107848284611d42565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261175990859061175f565b50505050565b60006117b4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118499092919063ffffffff16565b80519091501561184457808060200190518101906117d29190611d5a565b6118445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610546565b505050565b60606118588484600085611860565b949350505050565b6060824710156118d85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610546565b843b6119265760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610546565b600080866001600160a01b031685876040516119429190611d7c565b60006040518083038185875af1925050503d806000811461197f576040519150601f19603f3d011682016040523d82523d6000602084013e611984565b606091505b509150915061199482828661199f565b979650505050505050565b606083156119ae575081610784565b8251156119be5782518084602001fd5b8160405162461bcd60e51b81526004016105469190611c6c565b6000602082840312156119ea57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611a3257600080fd5b813567ffffffffffffffff80821115611a4a57600080fd5b818401915084601f830112611a5e57600080fd5b813581811115611a7057611a706119f1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ab657611ab66119f1565b81604052828152876020848701011115611acf57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6001600160a01b0381168114611b0457600080fd5b50565b60008060408385031215611b1a57600080fd5b8235611b2581611aef565b91506020830135611b3581611aef565b809150509250929050565b600060208284031215611b5257600080fd5b813561078481611aef565b600080600080600080600060e0888a031215611b7857600080fd5b8735611b8381611aef565b96506020880135611b9381611aef565b95506040880135945060608801359350608088013560ff81168114611bb757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611be757600080fd5b50508035926020909101359150565b60005b83811015611c11578181015183820152602001611bf9565b838111156117595750506000910152565b60008151808452611c3a816020860160208601611bf6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107846020830184611c22565b600060208284031215611c9157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611cff57611cff611c98565b500290565b60006001600160a01b03808816835280871660208401525084604083015263ffffffff8416606083015260a0608083015261199460a0830184611c22565b60008219821115611d5557611d55611c98565b500190565b600060208284031215611d6c57600080fd5b8151801515811461078457600080fd5b60008251611d8e818460208701611bf6565b919091019291505056fea164736f6c6343000809000a" + } + } +} diff --git a/boba_community/fraud-detector/addresses.json b/boba_community/fraud-detector/state-dumps/mainnet/addresses.json similarity index 100% rename from boba_community/fraud-detector/addresses.json rename to boba_community/fraud-detector/state-dumps/mainnet/addresses.json diff --git a/boba_community/fraud-detector/state-dump.latest.json b/boba_community/fraud-detector/state-dumps/mainnet/state-dump.latest.json similarity index 100% rename from boba_community/fraud-detector/state-dump.latest.json rename to boba_community/fraud-detector/state-dumps/mainnet/state-dump.latest.json diff --git a/boba_community/fraud-detector/state-dumps/v1_mainnet/addresses.json b/boba_community/fraud-detector/state-dumps/v1_mainnet/addresses.json new file mode 100644 index 0000000000..e51e31f539 --- /dev/null +++ b/boba_community/fraud-detector/state-dumps/v1_mainnet/addresses.json @@ -0,0 +1,11 @@ +{ + "AddressManager":"0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089", + "OVM_CanonicalTransactionChain":"0x4B5D9E5A6B1a514eba15A2f949531DcCd7c272F2", + "ChainStorageContainer-CTC-batches":"0xA7557b676EA0D9406459409B5ad01c14b5522c46", + "ChainStorageContainer-CTC-queue":"0x33938f8E5F2c36e3Ca2B01E878b3322E280d4c50", + "ChainStorageContainer-SCC-batches":"0x318d4dAb7D3793E40139b496c3B89422Ae5372D1", + "Deployer":"0x1f2414D0af8741Bc822dBc2f88069c2b2907a840", + "Proxy__OVM_L1CrossDomainMessenger":"0x6D4528d192dB72E282265D6092F4B872f9Dff69e", + "Proxy__OVM_L1StandardBridge":"0xdc1664458d2f0B6090bEa60A8793A4E66c2F1c00", + "OVM_StateCommitmentChain":"0x17834b754e2f09946CE48D7B5beB4D7D94D98aB6" +} diff --git a/boba_community/fraud-detector/state-dumps/v1_mainnet/state-dump.latest.json b/boba_community/fraud-detector/state-dumps/v1_mainnet/state-dump.latest.json new file mode 100644 index 0000000000..0eb51e508d --- /dev/null +++ b/boba_community/fraud-detector/state-dumps/v1_mainnet/state-dump.latest.json @@ -0,0 +1,3542 @@ +{ + "accounts": { + "OVM_L2CrossDomainMessenger": { + "address": "0x4200000000000000000000000000000000000007", + "code": "0x60806040525a61000d610a55565b80156100215760008061001e610aaf565b50505b50600436106100a45760003560e01c80636e296e45116100775780636e296e451461011857806382e3702d14610120578063b1b1b20914610133578063cbd4ece914610146578063ecc7042814610159576100a4565b806321d800ec146100b2578063299ca478146100db5780633dbb202b146100f0578063461a447814610105575b6000806100af610aaf565b50505b6100c56100c0366004611005565b61016e565b6040516100d29190611167565b60405180910390f35b6100e3610195565b6040516100d29190611116565b6101036100fe366004610f80565b6101b3565b005b6100e3610113366004611026565b610281565b6100e36103a9565b6100c561012e366004611005565b610423565b6100c5610141366004611005565b61043d565b610103610154366004610f06565b610457565b61016161081e565b6040516100d29190611172565b600260205280600052604060002060009150610188610b1a565b906101000a900460ff1681565b6000806101a0610b1a565b906101000a90046001600160a01b031681565b60006101d2845a6101c2610b66565b8560056101cd610b1a565b61082b565b905060016005600082826101e4610b1a565b0192505081906101f2610bac565b5050506001600460008380519060200120815260200190815260200160002060018161021c610b1a565b8160ff02191690831515021790610231610bac565b505050610244818363ffffffff1661087c565b7f0ee9ffdb2334d78de97ffb066b23a352a4d35180cefb36589d663fbb1eb6f32681604051610273919061117b565b60405180910390a150505050565b6000808061028d610b1a565b906101000a90046001600160a01b03166001600160a01b031663bf40fac1836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102f85780820151838201526020016102e0565b50505050905090810190601f1680156103255780820380516001836020036101000a031916815260200191505b5092505050602060405180830381868061033d610bfa565b1580156103525760008061034f610aaf565b50505b505a61035c610c46565b505050505015801561037b573d6000803e3d6000610378610aaf565b50505b505050506040513d602081101561039a57600080610397610aaf565b50505b81019080805195945050505050565b600061dead8160066103b9610b1a565b906101000a90046001600160a01b03166001600160a01b031614156104025760405162461bcd60e51b81526004016103f09061118e565b604051809103906103ff610aaf565b50505b6000600661040e610b1a565b906101000a90046001600160a01b0316905090565b600460205280600052604060002060009150610188610b1a565b600360205280600052604060002060009150610188610b1a565b60026001610463610b1a565b14156104be5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401604051809103906104bb610aaf565b50505b60028060016104cb610bac565b5050506104d6610939565b15156001146105095760405162461bcd60e51b81526004016104f790611210565b60405180910390610506610aaf565b50505b60006105178585858561082b565b905060008180519060200120600081815260036020529091506040902060009061053f610b1a565b60ff6101009290920a9004161561057a5760405162461bcd60e51b8152600401610568906111c5565b60405180910390610577610aaf565b50505b6105b060405160408082019052601781527627ab26afa6192a37a618a6b2b9b9b0b3b2a830b9b9b2b960491b6020820152610281565b6001600160a01b0316866001600160a01b031614156106045760008181526003602052600190604090206001816105e5610b1a565b8160ff021916908315150217906105fa610bac565b5050505050610809565b846006600181610612610b1a565b816001600160a01b0302191690836001600160a01b0316021790610634610bac565b5050506000866001600160a01b03168560405161065191906110bb565b6000604051808303816000865a610666610d33565b5050505050509150503d806000811461069b576040513d603f01601f191681016040523d815291503d6000602084013e6106a0565b606091505b5050905061dead600660006101000a816106b8610b1a565b816001600160a01b0302191690836001600160a01b03160217906106da610bac565b50505060018115151415610758576000828152600360205260019060409020600181610704610b1a565b8160ff02191690831515021790610719610bac565b5050507f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c8260405161074b9190611172565b60405180910390a1610790565b7f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f826040516107879190611172565b60405180910390a15b6000835a61079c610b66565b5a6107a5610dff565b6040516020016107b7939291906110d7565b6040516020818303038152906040528051906020012060008181526002602052909150600190604090206001816107ec610b1a565b8160ff02191690831515021790610801610bac565b505050505050505b60018080610815610bac565b50505050505050565b6005610828610b1a565b81565b606084848484604051602401610844949392919061112a565b604051601f1981830301815260409190915263cbd4ece960e01b6020820180516001600160e01b031690911790529050949350505050565b6108b260405160408082019052601781527627ab26afa6192a37a618a6b2b9b9b0b3b2a830b9b9b2b960491b6020820152610281565b6001600160a01b031663cafa81dc836040518263ffffffff1660e01b81526004016108dd919061117b565b600060405180830381600087806108f2610bfa565b15801561090757600080610904610aaf565b50505b505a610911610d33565b505050505050158015610931573d6000803e3d600061092e610aaf565b50505b505050505050565b600061097760405160408082019052601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000006020820152610281565b6001600160a01b03166109b260405160408082019052601381527227ab26afa618a6b2b9b9b0b3b2a9b2b73232b960691b6020820152610281565b6001600160a01b031663d20341066040518163ffffffff1660e01b815260040160206040518083038186806109e5610bfa565b1580156109fa576000806109f7610aaf565b50505b505a610a04610c46565b5050505050158015610a23573d6000803e3d6000610a20610aaf565b50505b50505050604051601f3d908101601f19168201604052610a469190810190610ee1565b6001600160a01b031614905090565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610aaa57600082820152602001610a93565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610ae7578086015182820160400152602001610acc565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610a93565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610a93565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b600081526020610a93565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610a93565b638540661f598160e01b8152610c79565b8080831115610c635750815b92915050565b8080831015610c63575090919050565b836004820152846024820152606060448201528660648201526084810160005b88811015610cb1578088015182820152602001610c99565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af15059610d068d3d610c69565b8c01610d128187610c57565b5b82811015610d275760008152602001610d13565b50929c50505050505050565b635b99d1c5598160e01b81528360048201528460248201528560448201526080606482015287608482015260a4810160005b89811015610d7d578089015182820152602001610d65565b506060828a60c40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af15059610dd28e3d610c69565b8d01610dde8187610c57565b5b82811015610df35760008152602001610ddf565b50929d50505050505050565b635a98c361598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610a93565b600067ffffffffffffffff80841115610e5a57fe5b604051601f8501601f191681016020018281118282101715610e7857fe5b604052848152915081838501861015610e9957600080610e96610aaf565b50505b8484602083013760006020868301015250509392505050565b600082601f830112610ecb578081610ec8610aaf565b50505b610eda83833560208501610e45565b9392505050565b600060208284031215610efb578081610ef8610aaf565b50505b8151610eda81611287565b60008060008060808587031215610f24578283610f21610aaf565b50505b8435610f2f81611287565b93506020850135610f3f81611287565b9250604085013567ffffffffffffffff811115610f63578283610f60610aaf565b50505b610f6f87828801610eb2565b949793965093946060013593505050565b600080600060608486031215610f9d578283610f9a610aaf565b50505b8335610fa881611287565b9250602084013567ffffffffffffffff811115610fcc578283610fc9610aaf565b50505b610fd886828701610eb2565b925050604084013563ffffffff81168114610ffa578182610ff7610aaf565b50505b809150509250925092565b60006020828403121561101f57808161101c610aaf565b50505b5035919050565b60006020828403121561104057808161103d610aaf565b50505b813567ffffffffffffffff81111561105f57818261105c610aaf565b50505b8201601f81018413611078578182611075610aaf565b50505b61108784823560208401610e45565b949350505050565b600081518084526110a7816020860160208601611257565b601f01601f19169290920160200192915050565b600082516110cd818460208701611257565b9190910192915050565b600084516110e9818460208901611257565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526080604082018190526000906111569083018561108f565b905082606083015295945050505050565b901515815260200190565b90815260200190565b600060208252610eda602083018461108f565b6020808252601f908201527f78446f6d61696e4d65737361676553656e646572206973206e6f742073657400604082015260600190565b6020808252602b908201527f50726f7669646564206d6573736167652068617320616c72656164792062656560408201526a37103932b1b2b4bb32b21760a91b606082015260800190565b60208082526027908201527f50726f7669646564206d65737361676520636f756c64206e6f742062652076656040820152663934b334b2b21760c91b606082015260800190565b60005b8381101561127257808201518382015260200161125a565b83811115611281576000848401525b50505050565b6001600160a01b03811681146112a257600080610aaa610aaf565b5056", + "codeHash": "0x6bfef3ea1143e29eb4260605349feea3567405e78134570f287ae429605ba798", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x4200000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x01", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0xdead" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_libAddressManager", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "FailedRelayedMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "RelayedMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "SentMessage", + "type": "event" + }, + { + "inputs": [], + "name": "libAddressManager", + "outputs": [ + { + "internalType": "contract Lib_AddressManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messageNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_messageNonce", + "type": "uint256" + } + ], + "name": "relayMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "relayedMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "resolve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "_gasLimit", + "type": "uint32" + } + ], + "name": "sendMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "sentMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "successfulMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xDomainMessageSender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_L2StandardBridge": { + "address": "0x4200000000000000000000000000000000000010", + "code": "0x60806040525a61000d610add565b80156100215760008061001e610b37565b50505b50600436106100685760003560e01c806332b7006d1461007657806336c717c11461008b5780633cb747bf146100a9578063662a633a146100b1578063a3a79548146100c4575b600080610073610b37565b50505b610089610084366004611020565b6100d7565b005b6100936100fd565b6040516100a091906110cb565b60405180910390f35b61009361011c565b6100896100bf366004610ee5565b610127565b6100896100d2366004610f8d565b61053e565b6100f6855a6100e4610ba2565b5a6100ed610ba2565b8787878761055d565b5050505050565b60006001610109610be8565b906101000a90046001600160a01b031681565b600080610109610be8565b60006001610133610be8565b906101000a90046001600160a01b031661014b6107ce565b6001600160a01b03165a61015d610ba2565b6001600160a01b0316146101ab5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111d9602e9139604001915050604051809103906101a8610b37565b50505b806001600160a01b03166101bd6107ce565b6001600160a01b0316636e296e456040518163ffffffff1660e01b815260040160206040518083038186806101f0610c34565b15801561020557600080610202610b37565b50505b505a61020f610c80565b505050505015801561022e573d6000803e3d600061022b610b37565b50505b505050506040513d602081101561024d5760008061024a610b37565b50505b8101908080516001600160a01b03169390931492506102a99150505760405162461bcd60e51b815260040180806020018281038252603081526020018061120760309139604001915050604051809103906102a6610b37565b50505b6102ba87631d1d8b6360e01b6107ef565b801561036e5750866001600160a01b031663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087806102f7610c34565b15801561030c57600080610309610b37565b50505b505a610316610d6b565b505050505050158015610336573d6000803e3d6000610333610b37565b50505b50505050604051601f3d908101601f191682016040526103599190810190610eb9565b6001600160a01b0316886001600160a01b0316145b1561045957866001600160a01b03166340c10f1986866040518363ffffffff1660e01b81526004016103a19291906110df565b600060405180830381600087806103b6610c34565b1580156103cb576000806103c8610b37565b50505b505a6103d5610d6b565b5050505050501580156103f5573d6000803e3d60006103f2610b37565b50505b50505050856001600160a01b0316876001600160a01b0316896001600160a01b03167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161044c9493929190611188565b60405180910390a4610534565b600063a9f9e67560e01b8989888a89898960405160240161048097969594939291906110f8565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0316909117905290506104d7600060016104bf610be8565b906101000a90046001600160a01b0316600083610814565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce08989898960405161052a9493929190611188565b60405180910390a4505b5050505050505050565b610555865a61054b610ba2565b878787878761055d565b505050505050565b866001600160a01b0316639dc29fac5a610575610ba2565b866040518363ffffffff1660e01b81526004016105939291906110df565b600060405180830381600087806105a8610c34565b1580156105bd576000806105ba610b37565b50505b505a6105c7610d6b565b5050505050501580156105e7573d6000803e3d60006105e4610b37565b50505b505050506000876001600160a01b031663c01e1bd66040518163ffffffff1660e01b815260040160206040518083038160008780610623610c34565b15801561063857600080610635610b37565b50505b505a610642610d6b565b505050505050158015610662573d6000803e3d600061065f610b37565b50505b50505050604051601f3d908101601f191682016040526106859190810190610eb9565b905060606001600160a01b0389166006602160991b0114156106f75763054cbb0d60e21b88888887876040516024016106c2959493929190611149565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03169091179052905061074d565b63a9f9e67560e01b828a8a8a8a898960405160240161071c97969594939291906110f8565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0316909117905290505b6107736000600161075c610be8565b906101000a90046001600160a01b03168683610814565b5a61077c610ba2565b6001600160a01b0316896001600160a01b0316836001600160a01b03167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a898960405161052a9493929190611188565b600080806107da610be8565b906101000a90046001600160a01b0316905090565b60006107fa83610925565b801561080b575061080b838361095b565b90505b92915050565b61081c6107ce565b6001600160a01b0316633dbb202b8483856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018363ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561089457808201518382015260200161087c565b50505050905090810190601f1680156108c15780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087806108dd610c34565b1580156108f2576000806108ef610b37565b50505b505a6108fc610d6b565b50505050505015801561091c573d6000803e3d6000610919610b37565b50505b50505050505050565b6000610938826301ffc9a760e01b61095b565b80156109535750610951826001600160e01b031961095b565b155b90505b919050565b600080600061096a8585610981565b915091508180156109785750805b95945050505050565b600080806301ffc9a760e01b846040516001600160e01b03199091166024820152604401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0316909117905290506000806001600160a01b038716617530846040518082805190602001908083835b60208310610a155780518252601f1990920191602091820191016109f6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686610a4d610c80565b5050505050925050503d8060008114610a82576040513d603f01601f191681016040523d815291503d6000602084013e610a87565b606091505b5091509150602081511015610aa55760008094509450505050610ad6565b816020820182516020811015610ac357600080610ac0610b37565b50505b8101908080519398509296505050505050505b9250929050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610b3257600082820152602001610b1b565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610b6f578086015182820160400152602001610b54565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610b1b565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610b1b565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610b1b565b638540661f598160e01b8152610cb1565b808083111561080e575090919050565b808083101561080e575090919050565b836004820152846024820152606060448201528660648201526084810160005b88811015610ce9578088015182820152602001610cd1565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af15059610d3e8d3d610ca1565b8c01610d4a8187610c91565b5b82811015610d5f5760008152602001610d4b565b50929c50505050505050565b635b99d1c5598160e01b81528360048201528460248201528560448201526080606482015287608482015260a4810160005b89811015610db5578089015182820152602001610d9d565b506060828a60c40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af15059610e0a8e3d610ca1565b8d01610e168187610c91565b5b82811015610e2b5760008152602001610e17565b50929d50505050505050565b60008083601f840112610e51578182610e4e610b37565b50505b50813567ffffffffffffffff811115610e71578182610e6e610b37565b50505b602083019150836020828501011115610ad657600080610e8f610b37565b50509250929050565b803563ffffffff8116811461095657600080610eb2610b37565b5050919050565b600060208284031215610ed3578081610ed0610b37565b50505b8151610ede816111ba565b9392505050565b600080600080600080600060c0888a031215610f08578283610f05610b37565b50505b8735610f13816111ba565b96506020880135610f23816111ba565b95506040880135610f33816111ba565b94506060880135610f43816111ba565b93506080880135925060a088013567ffffffffffffffff811115610f6e578283610f6b610b37565b50505b610f7a8a828b01610e37565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610fae578182610fab610b37565b50505b8635610fb9816111ba565b95506020870135610fc9816111ba565b945060408701359350610fde60608801610e98565b9250608087013567ffffffffffffffff811115611002578283610fff610b37565b50505b61100e89828a01610e37565b979a9699509497509295939492505050565b60008060008060006080868803121561104057808161103d610b37565b50505b853561104b816111ba565b94506020860135935061106060408701610e98565b9250606086013567ffffffffffffffff811115611084578182611081610b37565b50505b61109088828901610e37565b969995985093965092949392505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03888116825287811660208301528681166040830152851660608201526080810184905260c060a0820181905260009061113c90830184866110a1565b9998505050505050505050565b6001600160a01b038681168252851660208201526040810184905260806060820181905260009061117d90830184866110a1565b979650505050505050565b600060018060a01b0386168252846020830152606060408301526111b06060830184866110a1565b9695505050505050565b6001600160a01b03811681146111d557600080610b32610b37565b5056fe4f564d5f58434841494e3a206d657373656e67657220636f6e747261637420756e61757468656e746963617465644f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f73732d646f6d61696e206d657373616765", + "codeHash": "0xbf0da8666a815f8ff44e2f3766b28e0b2f184c5118f293bc6a4ad26291cc9dfb", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x4200000000000000000000000000000000000007" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_l2CrossDomainMessenger", + "type": "address" + }, + { + "internalType": "address", + "name": "_l1TokenBridge", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "DepositFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1TokenBridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_l1Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_l1Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "withdrawTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_DeployerWhitelist": { + "address": "0x4200000000000000000000000000000000000002", + "code": "0x60806040525a61000d610657565b80156100215760008061001e6106b1565b50505b50600436106100af5760003560e01c80638da5cb5b116100775780638da5cb5b146101805780639b19251a146101a4578063b1540a01146101d3578063bdc7b54f14610202578063d533887a1461020a576100af565b806308fd6322146100bd57806313af4035146100f6578063158ef93e14610125578063400ada75146101415780637ec630dd14610178575b6000806100ba6106b1565b50505b6100f4600480360360408110156100dc576000806100d96106b1565b50505b506001600160a01b0381351690602001351515610232565b005b6100f460048036036020811015610115576000806101126106b1565b50505b50356001600160a01b03166102ef565b61012d6103a3565b604051901515815260200160405180910390f35b6100f4600480360360408110156101605760008061015d6106b1565b50505b506001600160a01b03813516906020013515156103bb565b61012d610469565b610188610475565b6040516001600160a01b03909116815260200160405180910390f35b61012d600480360360208110156101c3576000806101c06106b1565b50505b50356001600160a01b0316610494565b61012d600480360360208110156101f2576000806101ef6106b1565b50505b50356001600160a01b03166104ae565b6100f4610525565b6100f460048036036020811015610229576000806102266106b1565b50505b503515156105b7565b6002600061023e61071c565b906101000a90046001600160a01b03166001600160a01b03165a610260610768565b6001600160a01b0316146102ae5760405162461bcd60e51b815260040180806020018281038252603a8152602001806107fd603a9139604001915050604051809103906102ab6106b1565b50505b6001600160a01b038216600090815260016020528190604090206001816102d361071c565b8160ff021916908315150217906102e86107ae565b5050505050565b600260006102fb61071c565b906101000a90046001600160a01b03166001600160a01b03165a61031d610768565b6001600160a01b03161461036b5760405162461bcd60e51b815260040180806020018281038252603a8152602001806107fd603a9139604001915050604051809103906103686106b1565b50505b806000620100008161037b61071c565b816001600160a01b0302191690836001600160a01b031602179061039d6107ae565b50505050565b6000806103ae61071c565b906101000a900460ff1681565b6000806103c661071c565b906101000a900460ff1615156001151514156103e157610465565b6001600081816103ef61071c565b8160ff021916908315150217906104046107ae565b50505080600060016101000a8161041961071c565b8160ff0219169083151502179061042e6107ae565b50505081600060026101000a8161044361071c565b816001600160a01b0302191690836001600160a01b03160217906102e86107ae565b5050565b600160006103ae61071c565b6002600061048161071c565b906101000a90046001600160a01b031681565b6001602052806000526040600020600091506103ae61071c565b600080806104ba61071c565b60ff6101009290920a90041615806104eb5750600160006104d961071c565b906101000a900460ff16151560011515145b8061051f57506001600160a01b038216600090815260016020526040902060009061051461071c565b906101000a900460ff165b92915050565b6002600061053161071c565b906101000a90046001600160a01b03166001600160a01b03165a610553610768565b6001600160a01b0316146105a15760405162461bcd60e51b815260040180806020018281038252603a8152602001806107fd603a91396040019150506040518091039061059e6106b1565b50505b6105ab60016105b7565b6105b560006102ef565b565b600260006105c361071c565b906101000a90046001600160a01b03166001600160a01b03165a6105e5610768565b6001600160a01b0316146106335760405162461bcd60e51b815260040180806020018281038252603a8152602001806107fd603a9139604001915050604051809103906106306106b1565b50505b8060006101008161064261071c565b8160ff0219169083151502179061039d6107ae565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156106ac57600082820152602001610695565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156106e95780860151828201604001526020016106ce565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610695565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610695565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061069556fe46756e6374696f6e2063616e206f6e6c792062652063616c6c656420627920746865206f776e6572206f66207468697320636f6e74726163742e", + "codeHash": "0x0c2bb0c6f7882dabc55fa57d77db80500a65f4dc0bf6b6677b74d9f637a73f52", + "storage": {}, + "abi": [ + { + "inputs": [], + "name": "allowArbitraryDeployment", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enableArbitraryContractDeployment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "bool", + "name": "_allowArbitraryDeployment", + "type": "bool" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_deployer", + "type": "address" + } + ], + "name": "isDeployerAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowArbitraryDeployment", + "type": "bool" + } + ], + "name": "setAllowArbitraryDeployment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_deployer", + "type": "address" + }, + { + "internalType": "bool", + "name": "_isWhitelisted", + "type": "bool" + } + ], + "name": "setWhitelistedDeployer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_L1MessageSender": { + "address": "0x4200000000000000000000000000000000000001", + "code": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063d203410614602d575b600080fd5b6033604f565b604080516001600160a01b039092168252519081900360200190f35b6000336001600160a01b0316639dc9dc936040518163ffffffff1660e01b815260040160206040518083038186803b158015608957600080fd5b505afa158015609c573d6000803e3d6000fd5b505050506040513d602081101560b157600080fd5b505190509056fea164736f6c6343000706000a", + "codeHash": "0xa7b7da324cbd8f2dc442e0df605ad553af131f4986976ca38907bc8daa556841", + "storage": {}, + "abi": [ + { + "inputs": [], + "name": "getL1MessageSender", + "outputs": [ + { + "internalType": "address", + "name": "_l1MessageSender", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_L2ToL1MessagePasser": { + "address": "0x4200000000000000000000000000000000000000", + "code": "0x60806040525a61000d610244565b80156100215760008061001e61029e565b50505b50600436106100475760003560e01c806382e3702d14610055578063cafa81dc1461008f575b60008061005261029e565b50505b61007b600480360360208110156100745760008061007161029e565b50505b503561015a565b604051901515815260200160405180910390f35b610158600480360360208110156100ae576000806100ab61029e565b50505b8101906020810181356401000000008111156100d2576000806100cf61029e565b50505b8201836020820111156100ed576000806100ea61029e565b50505b803590602001918460018302840111640100000000831117156101185760008061011561029e565b50505b91908080601f0160208091040260200160405190810160405281815292919060208401838380828437600092019190915250929550610181945050505050565b005b600060205280600052604060002060009150610174610309565b906101000a900460ff1681565b6001600080835a610190610355565b6040516020018083805190602001908083835b602083106101c25780518252601f1990920191602091820191016101a3565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001208152602001908152602001600020600181610229610309565b8160ff0219169083151502179061023e61039b565b50505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561029957600082820152602001610282565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156102d65780860151828201604001526020016102bb565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610282565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610282565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061028256", + "codeHash": "0x744a3abdcf70d78602d3babe19cbb0ee814b47071a2bdf78e7af7d65f940020a", + "storage": {}, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "L2ToL1Message", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "passMessageToL1", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "sentMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_SafetyChecker": { + "address": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0005", + "code": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a44eb59a14610030575b600080fd5b6100d66004803603602081101561004657600080fd5b81019060208101813564010000000081111561006157600080fd5b82018360208201111561007357600080fd5b8035906020019184600183028401116401000000008311171561009557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100ea945050505050565b604080519115158252519081900360200190f35b60408051610100810182527e0101010101010101010101000000000101010101010101010101010101000081526b010101010101000000010100600160f81b016020808301919091526f0101010100000001010101010000000092820192909252630203040560e01b60608201527f0101010101010101010101010101010101010101010101010101010101010101608082015264010101010160d81b60a0820152600060c0820181905260e0820181905283519092741fffffffff000000000f8f000063f000013fff0ffe916a40000000000000000000026117ff60f31b039163ffffffff60601b1991870181019087015b8051600081811a880151811a82811a890151821a0182811a890151821a0182811a890151821a0182811a890151821a0182811a89015190911a01918201911a6001811b86811661032057808516610239575001605d1901610326565b80861661027e575b8280600101935050825160001a915081605b141561025e57610279565b6001821b851661027157918101605e1901915b838310610241575b610320565b816033141561030f578251602084015160d81c673350600060045af160c083901c14156102b057600885019450610306565b817f336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a0157601480156102e357508064016000f35b145b156102f357602585019450610306565b60009a5050505050505050505050610338565b50505050610326565b600098505050505050505050610338565b50506001015b8181106101dd57600196505050505050505b91905056fea164736f6c6343000706000a", + "codeHash": "0x02e6b456194e266a729e352afbea454e6281bc8b662bdedc19fabc9e42fbddd0", + "storage": {}, + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "_bytecode", + "type": "bytes" + } + ], + "name": "isBytecodeSafe", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ] + }, + "OVM_ExecutionManager": { + "address": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0006", + "code": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063741a33eb1161011a578063996d79a5116100ad578063a8c4c5ec1161007c578063a8c4c5ec146103eb578063bdbf8c36146103f3578063c1fb2ea2146103fb578063f573102114610403578063ffe7391414610416576101fb565b8063996d79a5146103b557806399ccd98b146103bd5780639be3ad67146103d05780639dc9dc93146103e3576101fb565b80638435035b116100e95780638435035b146103745780638540661f1461038757806385979f761461039a57806390580256146103ad576101fb565b8063741a33eb14610326578063746c32f11461033957806376427cac146103595780637cebbe941461036c576101fb565b806322bd64c011610192578063461a447811610161578063461a4478146102e25780635a98c361146102f55780635b99d1c5146102fd578063735090641461031e576101fb565b806322bd64c01461029257806324749d5c146102a7578063299ca478146102ba5780632a2a7adb146102cf576101fb565b806314aa2ff7116101ce57806314aa2ff7146102595780631c4712a71461027a5780631f64338b1461028257806320160f3a1461028a576101fb565b806303daa9591461020057806308bf7dbf146102295780630a5635ae14610231578063101185a414610244575b600080fd5b61021361020e366004612924565b610429565b6040516102209190612dbe565b60405180910390f35b61021361046e565b61021361023f366004612898565b610480565b61024c610516565b6040516102209190612ed3565b61026c6102673660046129b6565b61051f565b604051610220929190612e39565b6102136105b1565b6102136105b7565b6102136105be565b6102a56102a0366004612954565b6105c4565b005b6102136102b5366004612898565b61061f565b6102c2610638565b6040516102209190612dc7565b6102a56102dd3660046129b6565b610647565b6102c26102f0366004612b16565b610655565b610213610731565b61031061030b366004612c4d565b610737565b604051610220929190612e5d565b6102c26107bd565b6102a5610334366004612975565b6107cc565b61034c6103473660046128d0565b610931565b6040516102209190612e96565b61034c610367366004612b8e565b61094e565b6102a5610a50565b610213610382366004612898565b610a9f565b610310610395366004612bf7565b610ab2565b6103106103a8366004612bf7565b610b39565b610213610b56565b6102c2610b5c565b61026c6103cb366004612a37565b610b6b565b61034c6103de366004612b5b565b610bf8565b6102c2610d5a565b610213610d69565b610213610d6f565b610213610d75565b6102a56104113660046129e8565b610d87565b610310610424366004612bf7565b610f50565b6000619c4060005a9050600061043d610b5c565b90506104498186610fa5565b93505060005a820390508083101561046657601280548483030190555b505050919050565b600061047b61023f610b5c565b905090565b600080826040516024016104949190612dc7565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905290506000806104d55a6006602160991b0185610ab2565b915091508115806104e857508051602014155b156104f7576104f76000611033565b8080602001905181019061050b919061293c565b93505050505b919050565b60085460ff1690565b60115460009060609060ff1615156001141561053f5761053f6006611033565b619c4060005a90506000610551610b5c565b905061055c8161104c565b60006105708261056b846110e1565b61116c565b905061057e81886003611206565b95509550505060005a82039050808310156105a05760128054840190556105a9565b60128054820190555b505050915091565b60045490565b62015f9081565b600b5490565b60115460ff161515600114156105de576105de6006611033565b61ea6060005a905060006105f0610b5c565b90506105fd818686611290565b5060005a820390508083101561061857601280548483030190555b5050505050565b600061063261062d83611317565b6113a2565b92915050565b6000546001600160a01b031681565b6106526001826113a6565b50565b6000805460405163bf40fac160e01b81526020600482018181528551602484015285516001600160a01b039094169363bf40fac19387938392604490920191908501908083838b5b838110156106b557818101518382015260200161069d565b50505050905090810190601f1680156106e25780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156106ff57600080fd5b505afa158015610713573d6000803e3d6000fd5b505050506040513d602081101561072957600080fd5b505192915050565b600a5490565b60006060620186a060005a60408051608081018252600f5460115460ff16151560608301526001600160a01b0390811682528a166020820152908101889052909150610787818a8a8960006113bc565b945094505060005a82039050808310156107a85760128054840190556107b1565b60128054820190555b50505094509492505050565b600e546001600160a01b031690565b60115460ff161515600114156107e6576107e66006611033565b600060018585601b0185856040516000815260200160405260405161080e9493929190612e78565b6020604051602081039080840390855afa158015610830573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661086c5761086c60405180606001604052806038815260200161304160389139610647565b6108758161144d565b61087f575061092b565b610888816114d8565b600f80546001600160a01b038381166001600160a01b03198316179092551660006108e56108c16009602160991b018361034782610a9f565b6040516020016108d19190612d88565b60405160208183030381529060405261153f565b600f80546001600160a01b0319166001600160a01b038516179055905061091c838261091081611552565b80519060200120611568565b6109278360006115a5565b5050505b50505050565b606061094661093f85611317565b8484611616565b949350505050565b6060331561095b57600080fd5b600280546001600160a01b0319166001600160a01b03841617905561097f8561163a565b600019601355600f80546001600160a01b0319166001600160a01b0386811691909117909155608086015116158015610a1e576000806109c28860c0015161051f565b90925090506001600160a01b038216610a02576000816040516020016109e9929190612e5d565b6040516020818303038152906040529350505050610946565b6001610a0d83611552565b6040516020016109e9929190612e5d565b600080610a398860a001518960800151888b60c00151610737565b9150915081816040516020016109e9929190612e5d565b60115460ff16151560011415610a6a57610a6a6006611033565b6000610a74610b5c565b90506000610a81826110e1565b905080816001011115610a9b57610a9b82826001016115a5565b5050565b6000610632610aad83611317565b6116ac565b600060606201388060005a60408051608081018252600f546001600160a01b03908116825289166020820152600160608201819052600092820192909252919250610b049082908a908a908a906113bc565b945094505060005a8203905080831015610b25576012805484019055610b2e565b60128054820190555b505050935093915050565b60006060610b4a8585600086610737565b91509150935093915050565b60075490565b600f546001600160a01b031690565b60115460009060609060ff16151560011415610b8b57610b8b6006611033565b619c4060005a90506000610b9d610b5c565b9050610ba88161104c565b6000610bb58289896116b0565b9050610bc381896004611206565b95509550505060005a8203905080831015610be5576012805484019055610bee565b60128054820190555b5050509250929050565b600a546060907fdefa017defa017defa017defa017defa017defa017defa017defa017defa017d14610c395750604080516020810190915260008152610632565b600280546001600160a01b0319166001600160a01b038481169190911791829055604051630d15d41560e41b815291169063d15d415090610c7e903390600401612dc7565b60206040518083038186803b158015610c9657600080fd5b505afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190612904565b610cf35760405162461bcd60e51b8152600401610cea90612f4f565b60405180910390fd5b610cfc8361163a565b610d05836116f6565b610d2657610d11611752565b50604080516020810190915260008152610632565b6000610d486003600001548560a0015103856080015160008760c00151610737565b915050610d53611752565b9392505050565b600d546001600160a01b031690565b60105490565b60095490565b600061047b610d82610b5c565b6110e1565b333014610d9357610a9b565b610d9c8161144d565b610daa57610daa6005611033565b6001546040516352275acd60e11b81526001600160a01b039091169063a44eb59a90610dda908590600401612e96565b60206040518083038186803b158015610df257600080fd5b505afa158015610e06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2a9190612904565b610e5957610e596004610e546040518060a0016040528060768152602001613079607691396117f4565b6113a6565b610e62816114d8565b6000610e6d8361153f565b90506001600160a01b038116610e87573d6000803e3d6000fd5b6000610e9282611552565b6001546040516352275acd60e11b81529192506001600160a01b03169063a44eb59a90610ec3908490600401612e96565b60206040518083038186803b158015610edb57600080fd5b505afa158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190612904565b610f3d57610f3d6004610e546040518060600160405280603081526020016130ef603091396117f4565b61092b8383610f4b856113a2565b611568565b60006060619c4060005a60408051608081018252600e546001600160a01b039081168252600f541660208201526010549181019190915260115460ff1615156060820152909150610b048189898960026113bc565b6000610fb18383611837565b600254604051631aaf392f60e01b81526001600160a01b0390911690631aaf392f90610fe39086908690600401612dff565b60206040518083038186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d53919061293c565b61065281604051806020016040528060008152506113a6565b6000806110ab5a6002602160991b0163b1540a0160e01b866040516024016110749190612dc7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ab2565b915091506000818060200190518101906110c59190612904565b90508015806110d2575082155b1561092b5761092b6007611033565b60006110ec82611972565b60025460405163d126199f60e01b81526001600160a01b039091169063d126199f9061111c908590600401612dc7565b60206040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610632919061293c565b60408051600280825260608201909252600091829190816020015b60608152602001906001900390816111875790505090506111a784611ab9565b816000815181106111b457fe5b60200260200101819052506111c883611ae3565b816001815181106111d557fe5b602002602001018190525060006111eb82611af6565b90506111fd8180519060200120611b3a565b95945050505050565b60006060611228611215610b5c565b611220610d82610b5c565b6001016115a5565b60408051608081018252600f546010549282019290925260115460ff16151560608201526001600160a01b0391821681529086166020820152600080611271835a8a8a8a611b3d565b9150915081611281576000611283565b875b9890975095505050505050565b8061129b8484610fa5565b14156112a657611312565b6112b08383611e9a565b600254604051635c17d62960e01b81526001600160a01b0390911690635c17d629906112e490869086908690600401612e18565b600060405180830381600087803b1580156112fe57600080fd5b505af1158015610927573d6000803e3d6000fd5b505050565b600061132282611972565b600254604051637c8ee70360e01b81526001600160a01b0390911690637c8ee70390611352908590600401612dc7565b60206040518083038186803b15801561136a57600080fd5b505afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063291906128b4565b3f90565b60006113b28383611fac565b9050805160208201fd5b6000606073ffffffffffffffffffffffffffffffffffff0000851673deaddeaddeaddeaddeaddeaddeaddeaddead0000141561140b575050604080516020810190915260008152600190611443565b60006064866001600160a01b03161061142c5761142786611317565b61142e565b855b905061143d8888838888611b3d565b92509250505b9550959350505050565b600061145882611972565b6002546040516307a1294560e01b81526001600160a01b03909116906307a1294590611488908590600401612dc7565b60206040518083038186803b1580156114a057600080fd5b505afa1580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190612904565b6114e181611972565b600254604051637e78a4d160e11b81526001600160a01b039091169063fcf149a290611511908490600401612dc7565b600060405180830381600087803b15801561152b57600080fd5b505af1158015610618573d6000803e3d6000fd5b6000808251602084016000f09392505050565b6060610632826000611563856116ac565b611616565b61157183612055565b6002546040516368510af960e11b81526001600160a01b039091169063d0a215f2906112e490869086908690600401612ddb565b6115ae82612055565b6002546040516374855dc360e11b81526001600160a01b039091169063e90abb86906115e09085908590600401612dff565b600060405180830381600087803b1580156115fa57600080fd5b505af115801561160e573d6000803e3d6000fd5b505050505050565b6060806040519050602083018101604052828152828460208301873c949350505050565b80516009556020810151600a5560a0810151600c5560408101516008805460ff19166001838181111561166957fe5b02179055506060810151600d80546001600160a01b0319166001600160a01b03909216919091179055600554600b5560a08101516116a690612164565b60135550565b3b90565b60008060ff60f81b858486805190602001206040516020016116d59493929190612d04565b6040516020818303038152906040528051906020012090506111fd81611b3a565b60007fdefa017defa017defa017defa017defa017defa017defa017defa017defa017d8260200151141561172c57506000610511565b61173e8260a001518360400151612177565b61174a57506000610511565b506001919050565b600d805473defa017defa017defa017defa017defa017defa06001600160a01b031991821681179092557fdefa017defa017defa017defa017defa017defa017defa017defa017defa017d6009819055600a819055600b819055600c8190556008805460ff199081169091556012829055600e8054841685179055600f8054841690941790935560118054909316909255601391909155600280549091169055565b6060816040516024016118079190612e96565b60408051601f198184030181529190526020810180516001600160e01b031662461bcd60e51b1790529050919050565b6175305a101561184b5761184b6000611033565b600254604051630ad2267960e01b81526001600160a01b0390911690630ad226799061187d9085908590600401612dff565b60206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd9190612904565b6118db576118db6003611033565b600254604051632bcdee1960e21b81526000916001600160a01b03169063af37b8649061190e9086908690600401612dff565b602060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119609190612904565b90508061131257611312614e206121a7565b6175305a1015611986576119866000611033565b60025460405163c8e40fbf60e01b81526001600160a01b039091169063c8e40fbf906119b6908490600401612dc7565b60206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a069190612904565b611a1457611a146003611033565b600254604051633ecdecc760e21b81526000916001600160a01b03169063fb37b31c90611a45908590600401612dc7565b602060405180830381600087803b158015611a5f57600080fd5b505af1158015611a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a979190612904565b905080610a9b57610a9b6175306064611ab2610aad86611317565b02016121a7565b606061063282604051602001611acf9190612ce7565b6040516020818303038152906040526121c7565b6060610632611af183612219565b6121c7565b60606000611b038361231d565b9050611b11815160c061241d565b81604051602001611b23929190612d59565b604051602081830303815290604052915050919050565b90565b60408501516000906060908015801590611b5b5750611b5b8461256d565b15611bcb5762015f905a1015611b84575050604080516020810190915260008082529150611443565b611b938762015f905a036125af565b96506000611ba58960200151836125c5565b905080611bc957600060405180602001604052806000815250935093505050611443565b505b60408051608081018252600e546001600160a01b039081168252600f541660208201526010549181019190915260115460ff1615156060820152611c0f818a612627565b6013546000611c1d8a612164565b6013819055905060006060611c31896126e8565b15611ce857306001600160a01b03168c63f573102160e01b8c8e604051602401611c5c929190612ea9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611c9a9190612d3d565b60006040518083038160008787f1925050503d8060008114611cd8576040519150601f19603f3d011682016040523d82523d6000602084013e611cdd565b606091505b509092509050611d4b565b8a6001600160a01b03168c8b604051611d019190612d3d565b60006040518083038160008787f1925050503d8060008114611d3f576040519150601f19603f3d011682016040523d82523d6000602084013e611d44565b606091505b5090925090505b600086118015611d5f5750611d5f8961256d565b8015611d69575081155b15611d91576000611d7e8660200151886125c5565b905080611d8f57611d8f6000611033565b505b611d9b8d86612627565b60135482611e8157600080600080611db2866126f1565b929650909450925090506003846007811115611dca57fe5b1415611dd957611dd984611033565b6001846007811115611de757fe5b1480611dfe57506004846007811115611dfc57fe5b145b80611e1457506006846007811115611e1257fe5b145b80611e2a57506007846007811115611e2857fe5b145b15611e355760128290555b6001846007811115611e4357fe5b1480611e5a57506004846007811115611e5857fe5b145b15611e6757809550611e7a565b6040518060200160405280600081525095505b5090925050505b909203909203601355909a909950975050505050505050565b611ea48282611837565b60025460405163af3dc01160e01b81526000916001600160a01b03169063af3dc01190611ed79086908690600401612dff565b602060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190612904565b90508061131257611f3983612055565b600260009054906101000a90046001600160a01b03166001600160a01b031663c3fd9b256040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f8957600080fd5b505af1158015611f9d573d6000803e3d6000fd5b50505050611312614e206121a7565b60606000836007811115611fbc57fe5b1415611fd75750604080516020810190915260008152610632565b6003836007811115611fe557fe5b14156120235760408051602080820183526000808352925161200d9387939092839201612ee7565b6040516020818303038152906040529050610632565b60135460125460405161203e92869290918690602001612f23565b604051602081830303815290604052905092915050565b61205e81611972565b60025460405163011b1f7960e41b81526000916001600160a01b0316906311b1f7909061208f908590600401612dc7565b602060405180830381600087803b1580156120a957600080fd5b505af11580156120bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e19190612904565b905080610a9b57600260009054906101000a90046001600160a01b03166001600160a01b03166333f943056040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561213857600080fd5b505af115801561214c573d6000803e3d6000fd5b50505050610a9b6175306064611ab2610aad86611317565b60005a8210612173575a610632565b5090565b60045460009083111561218c57506000610632565b60035483101561219e57506000610632565b50600192915050565b6013548111156121bb576121bb6002611033565b60138054919091039055565b606080825160011480156121ef57506080836000815181106121e557fe5b016020015160f81c105b156121fb575081610632565b6122078351608061241d565b8360405160200161203e929190612d59565b606060008260405160200161222e9190612dbe565b604051602081830303815290604052905060005b60208110156122785781818151811061225757fe5b01602001516001600160f81b0319161561227057612278565b600101612242565b6000816020036001600160401b038111801561229357600080fd5b506040519080825280601f01601f1916602001820160405280156122be576020820181803683370190505b50905060005b81518110156123145783516001840193859181106122de57fe5b602001015160f81c60f81b8282815181106122f557fe5b60200101906001600160f81b031916908160001a9053506001016122c4565b50949350505050565b606081516000141561233e5750604080516000815260208101909152610511565b6000805b83518110156123715783818151811061235757fe5b602002602001015151820191508080600101915050612342565b6000826001600160401b038111801561238957600080fd5b506040519080825280601f01601f1916602001820160405280156123b4576020820181803683370190505b50600092509050602081015b85518310156123145760008684815181106123d757fe5b6020026020010151905060006020820190506123f583828451612744565b87858151811061240157fe5b60200260200101515183019250505082806001019350506123c0565b6060806038841015612477576040805160018082528183019092529060208201818036833701905050905082840160f81b8160008151811061245b57fe5b60200101906001600160f81b031916908160001a905350610d53565b600060015b80868161248557fe5b041561249a576001909101906101000261247c565b816001016001600160401b03811180156124b357600080fd5b506040519080825280601f01601f1916602001820160405280156124de576020820181803683370190505b50925084820160370160f81b836000815181106124f757fe5b60200101906001600160f81b031916908160001a905350600190505b818111612563576101008183036101000a878161252c57fe5b048161253457fe5b0660f81b83828151811061254457fe5b60200101906001600160f81b031916908160001a905350600101612513565b5050905092915050565b60008082600481111561257c57fe5b1480612594575060035b82600481111561259257fe5b145b80610632575060048260048111156125a857fe5b1492915050565b60008183106125be5781610d53565b5090919050565b60008083836040516024016125db929190612dff565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b1790529050600061261d5a6006602160991b01600085610737565b5095945050505050565b805182516001600160a01b0390811691161461265f578051600e80546001600160a01b0319166001600160a01b039092169190911790555b80602001516001600160a01b031682602001516001600160a01b0316146126a5576020810151600f80546001600160a01b0319166001600160a01b039092169190911790555b8060600151151582606001511515146126cf5760608101516011805460ff19169115159190911790555b8060400151826040015114610a9b576040015160105550565b60006003612586565b60008060006060845160001415612720575050604080516020810190915260008082529250829150819061273d565b848060200190518101906127349190612a79565b93509350935093505b9193509193565b8282825b60208110612767578151835260209283019290910190601f1901612748565b905182516020929092036101000a6000190180199091169116179052505050565b600061279b61279684612fde565b612fbb565b90508281528383830111156127af57600080fd5b828260208301376000602084830101529392505050565b80356105118161302b565b600082601f8301126127e1578081fd5b610d5383833560208501612788565b80356002811061051157600080fd5b600060e08284031215612810578081fd5b61281a60e0612fbb565b90508135815260208201356020820152612836604083016127f0565b6040820152612847606083016127c6565b6060820152612858608083016127c6565b608082015260a082013560a082015260c08201356001600160401b0381111561288057600080fd5b61288c848285016127d1565b60c08301525092915050565b6000602082840312156128a9578081fd5b8135610d538161302b565b6000602082840312156128c5578081fd5b8151610d538161302b565b6000806000606084860312156128e4578182fd5b83356128ef8161302b565b95602085013595506040909401359392505050565b600060208284031215612915578081fd5b81518015158114610d53578182fd5b600060208284031215612935578081fd5b5035919050565b60006020828403121561294d578081fd5b5051919050565b60008060408385031215612966578182fd5b50508035926020909101359150565b6000806000806080858703121561298a578081fd5b84359350602085013560ff811681146129a1578182fd5b93969395505050506040820135916060013590565b6000602082840312156129c7578081fd5b81356001600160401b038111156129dc578182fd5b610946848285016127d1565b600080604083850312156129fa578182fd5b82356001600160401b03811115612a0f578283fd5b612a1b858286016127d1565b9250506020830135612a2c8161302b565b809150509250929050565b60008060408385031215612a49578182fd5b82356001600160401b03811115612a5e578283fd5b612a6a858286016127d1565b95602094909401359450505050565b60008060008060808587031215612a8e578182fd5b845160088110612a9c578283fd5b80945050602085015192506040850151915060608501516001600160401b03811115612ac6578182fd5b8501601f81018713612ad6578182fd5b8051612ae461279682612fde565b818152886020838501011115612af8578384fd5b612b09826020830160208601612fff565b9598949750929550505050565b600060208284031215612b27578081fd5b81356001600160401b03811115612b3c578182fd5b8201601f81018413612b4c578182fd5b61094684823560208401612788565b60008060408385031215612b6d578182fd5b82356001600160401b03811115612b82578283fd5b612a1b858286016127ff565b60008060008060808587031215612ba3578182fd5b84356001600160401b03811115612bb8578283fd5b612bc4878288016127ff565b9450506020850135612bd58161302b565b9250604085013591506060850135612bec8161302b565b939692955090935050565b600080600060608486031215612c0b578081fd5b833592506020840135612c1d8161302b565b915060408401356001600160401b03811115612c37578182fd5b612c43868287016127d1565b9150509250925092565b60008060008060808587031215612c62578182fd5b843593506020850135612c748161302b565b92506040850135915060608501356001600160401b03811115612c95578182fd5b612ca1878288016127d1565b91505092959194509250565b60008151808452612cc5816020860160208601612fff565b601f01601f19169290920160200192915050565b60088110612ce357fe5b9052565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60008251612d4f818460208701612fff565b9190910192915050565b60008351612d6b818460208801612fff565b835190830190612d7f818360208801612fff565b01949350505050565b6c600d380380600d6000396000f360981b81528151600090612db181600d850160208701612fff565b91909101600d0192915050565b90815260200190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b038316815260406020820181905260009061094690830184612cad565b60008315158252604060208301526109466040830184612cad565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610d536020830184612cad565b600060408252612ebc6040830185612cad565b905060018060a01b03831660208301529392505050565b6020810160028310612ee157fe5b91905290565b6000612ef38287612cd9565b60ff8516602083015260ff8416604083015260806060830152612f196080830184612cad565b9695505050505050565b6000612f2f8287612cd9565b84602083015283604083015260806060830152612f196080830184612cad565b60208082526046908201527f4f6e6c792061757468656e746963617465642061646472657373657320696e2060408201527f6f766d53746174654d616e616765722063616e2063616c6c20746869732066756060820152653731ba34b7b760d11b608082015260a00190565b6040518181016001600160401b0381118282101715612fd657fe5b604052919050565b60006001600160401b03821115612ff157fe5b50601f01601f191660200190565b60005b8381101561301a578181015183820152602001613002565b8381111561092b5750506000910152565b6001600160a01b038116811461065257600080fdfe5369676e61747572652070726f766964656420666f7220454f4120636f6e7472616374206372656174696f6e20697320696e76616c69642e436f6e7472616374206372656174696f6e20636f646520636f6e7461696e7320756e73616665206f70636f6465732e2044696420796f75207573652074686520726967687420636f6d70696c6572206f72207061737320616e20756e7361666520636f6e7374727563746f7220617267756d656e743f436f6e7374727563746f7220617474656d7074656420746f206465706c6f7920756e736166652062797465636f64652ea164736f6c6343000706000a", + "codeHash": "0x471295f44fcd482305d74e2729f5e2a2448c0e63f2e6cb787f18eb68220a8bc3", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x4200000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0005", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0xa7d8c0", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0xe8d4a51000", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x01a4", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0xdefa017defa017defa017defa017defa017defa0", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0xdefa017defa017defa017defa017defa017defa0", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0xdefa017defa017defa017defa017defa017defa0", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d", + "0x0000000000000000000000000000000000000000000000000000000000000013": "0xdefa017defa017defa017defa017defa017defa017defa017defa017defa017d" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_libAddressManager", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "minTransactionGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTransactionGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxGasPerQueuePerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "secondsPerEpoch", + "type": "uint256" + } + ], + "internalType": "struct iOVM_ExecutionManager.GasMeterConfig", + "name": "_gasMeterConfig", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "ovmCHAINID", + "type": "uint256" + } + ], + "internalType": "struct iOVM_ExecutionManager.GlobalContext", + "name": "_globalContext", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CALL_WITH_VALUE_INTRINSIC_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxTransactionGasLimit", + "outputs": [ + { + "internalType": "uint256", + "name": "_maxTransactionGasLimit", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "libAddressManager", + "outputs": [ + { + "internalType": "contract Lib_AddressManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "_ADDRESS", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + } + ], + "name": "ovmBALANCE", + "outputs": [ + { + "internalType": "uint256", + "name": "_BALANCE", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "ovmCALL", + "outputs": [ + { + "internalType": "bool", + "name": "_success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_returndata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "ovmCALL", + "outputs": [ + { + "internalType": "bool", + "name": "_success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_returndata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmCALLER", + "outputs": [ + { + "internalType": "address", + "name": "_CALLER", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmCALLVALUE", + "outputs": [ + { + "internalType": "uint256", + "name": "_CALLVALUE", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmCHAINID", + "outputs": [ + { + "internalType": "uint256", + "name": "_CHAINID", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_bytecode", + "type": "bytes" + } + ], + "name": "ovmCREATE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_bytecode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "ovmCREATE2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_messageHash", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "ovmCREATEEOA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "ovmDELEGATECALL", + "outputs": [ + { + "internalType": "bool", + "name": "_success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_returndata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_length", + "type": "uint256" + } + ], + "name": "ovmEXTCODECOPY", + "outputs": [ + { + "internalType": "bytes", + "name": "_code", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + } + ], + "name": "ovmEXTCODEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "_EXTCODEHASH", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + } + ], + "name": "ovmEXTCODESIZE", + "outputs": [ + { + "internalType": "uint256", + "name": "_EXTCODESIZE", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmGASLIMIT", + "outputs": [ + { + "internalType": "uint256", + "name": "_GASLIMIT", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmGETNONCE", + "outputs": [ + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmINCREMENTNONCE", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmL1QUEUEORIGIN", + "outputs": [ + { + "internalType": "enum Lib_OVMCodec.QueueOrigin", + "name": "_queueOrigin", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmL1TXORIGIN", + "outputs": [ + { + "internalType": "address", + "name": "_l1TxOrigin", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmNUMBER", + "outputs": [ + { + "internalType": "uint256", + "name": "_NUMBER", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "ovmREVERT", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmSELFBALANCE", + "outputs": [ + { + "internalType": "uint256", + "name": "_BALANCE", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "ovmSLOAD", + "outputs": [ + { + "internalType": "bytes32", + "name": "_value", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_value", + "type": "bytes32" + } + ], + "name": "ovmSSTORE", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "ovmSTATICCALL", + "outputs": [ + { + "internalType": "bool", + "name": "_success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_returndata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ovmTIMESTAMP", + "outputs": [ + { + "internalType": "uint256", + "name": "_TIMESTAMP", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "resolve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "enum Lib_OVMCodec.QueueOrigin", + "name": "l1QueueOrigin", + "type": "uint8" + }, + { + "internalType": "address", + "name": "l1TxOrigin", + "type": "address" + }, + { + "internalType": "address", + "name": "entrypoint", + "type": "address" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Lib_OVMCodec.Transaction", + "name": "_transaction", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_ovmStateManager", + "type": "address" + } + ], + "name": "run", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_creationCode", + "type": "bytes" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "safeCREATE", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "enum Lib_OVMCodec.QueueOrigin", + "name": "l1QueueOrigin", + "type": "uint8" + }, + { + "internalType": "address", + "name": "l1TxOrigin", + "type": "address" + }, + { + "internalType": "address", + "name": "entrypoint", + "type": "address" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Lib_OVMCodec.Transaction", + "name": "_transaction", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "contract iOVM_StateManager", + "name": "_ovmStateManager", + "type": "address" + } + ], + "name": "simulateMessage", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_StateManager": { + "address": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0007", + "code": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80638f3b96471161010f578063d126199f116100a2578063e90abb8611610071578063e90abb86146103f9578063fb37b31c1461040c578063fbcbc0f11461041f578063fcf149a21461043f576101f0565b8063d126199f146103b8578063d15d4150146103cb578063d54414c8146103de578063d7bd4a2a146103f1576101f0565b8063c3fd9b25116100de578063c3fd9b2514610377578063c7650bf21461037f578063c8e40fbf14610392578063d0a215f2146103a5576101f0565b80638f3b96471461033657806399056ba914610349578063af37b86414610351578063af3dc01114610364576101f0565b806333f94305116101875780636f3c75af116101565780636f3c75af146102f55780637c8ee703146103085780637e86faa81461031b5780638da5cb5b1461032e576101f0565b806333f94305146102b25780635c17d629146102ba5780636b18e4e8146102cd5780636c87ad20146102e0576101f0565b8063167020d2116101c3578063167020d2146102595780631aaf392f1461026c5780631b208a5a1461028c57806326dc5b121461029f576101f0565b806307a12945146101f55780630ad226791461021e57806311b1f790146102315780631381ba4d14610244575b600080fd5b61020861020336600461101d565b610452565b60405161021591906111c4565b60405180910390f35b61020861022c366004611072565b6104ba565b61020861023f36600461101d565b610517565b61025761025236600461101d565b610573565b005b61020861026736600461101d565b6105d4565b61027f61027a366004611072565b610679565b60405161021591906111cf565b61020861029a36600461101d565b610727565b61027f6102ad36600461101d565b61075e565b61025761077d565b6102576102c836600461109b565b6107c7565b6102576102db36600461101d565b61089a565b6102e8610944565b60405161021591906111b0565b610208610303366004611072565b610953565b6102e861031636600461101d565b61098c565b610208610329366004611072565b6109ad565b6102e86109c3565b6102576103443660046110cd565b6109d2565b61027f610a88565b61020861035f366004611072565b610a8e565b610208610372366004611072565b610ae2565b610257610b2f565b61020861038d366004611072565b610b79565b6102086103a036600461101d565b610c20565b6102576103b3366004611037565b610c40565b61027f6103c636600461101d565b610cb9565b6102086103d936600461101d565b610cd4565b6102086103ec36600461101d565b610d01565b61027f610d16565b610257610407366004611072565b610d1c565b61020861041a36600461101d565b610d77565b61043261042d36600461101d565b610dc3565b604051610215919061122e565b61025761044d36600461101d565b610e37565b6001600160a01b0381166000908152600260205260408120600301547fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701480156104b257506001600160a01b038216600090815260026020526040902054155b90505b919050565b6001600160a01b038216600090815260046020908152604080832084845290915281205460ff168061050e57506001600160a01b038316600090815260026020526040902060040154600160a01b900460ff165b90505b92915050565b600080546001600160a01b031633148061053b57506001546001600160a01b031633145b6105605760405162461bcd60e51b8152600401610557906111d8565b60405180910390fd5b6104b261056c83610ef8565b6002610f28565b6000546001600160a01b031633148061059657506001546001600160a01b031633145b6105b25760405162461bcd60e51b8152600401610557906111d8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314806105f857506001546001600160a01b031633145b6106145760405162461bcd60e51b8152600401610557906111d8565b600061061f83610ef8565b9050600260008281526005602052604090205460ff16600381111561064057fe5b1461064f5760009150506104b5565b6000908152600560205260409020805460ff19166003179055505060068054600019019055600190565b6001600160a01b038216600090815260046020908152604080832084845290915281205460ff161580156106cf57506001600160a01b038316600090815260026020526040902060040154600160a01b900460ff165b156106dc57506000610511565b506001600160a01b0391909116600090815260036020908152604080832093835292905220547ffeedfacecafebeeffeedfacecafebeeffeedfacecafebeeffeedfacecafebeef1890565b60008061073383610ef8565b905060025b60008281526005602052604090205460ff16600381111561075557fe5b10159392505050565b6001600160a01b03166000908152600260208190526040909120015490565b6000546001600160a01b03163314806107a057506001546001600160a01b031633145b6107bc5760405162461bcd60e51b8152600401610557906111d8565b600680546001019055565b6000546001600160a01b03163314806107ea57506001546001600160a01b031633145b6108065760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b038316600081815260036020908152604080832086845282528083207ffeedfacecafebeeffeedfacecafebeeffeedfacecafebeeffeedfacecafebeef86189055928252600481528282208583529052205460ff16610895576001600160a01b03831660009081526004602090815260408083208584529091529020805460ff191660011790555b505050565b6000546001600160a01b03163314806108bd57506001546001600160a01b031633145b6108d95760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b031660009081526002602081905260409091207f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421918101919091557fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470600390910155565b6001546001600160a01b031681565b6000806109608484610f8e565b905060025b60008281526005602052604090205460ff16600381111561098257fe5b1015949350505050565b6001600160a01b039081166000908152600260205260409020600401541690565b6000806109ba8484610f8e565b90506003610965565b6000546001600160a01b031681565b6000546001600160a01b03163314806109f557506001546001600160a01b031633145b610a115760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b039182166000908152600260208181526040928390208451815590840151600182015591830151908201556060820151600382015560808201516004909101805460a0909301516001600160a01b0319909316919093161760ff60a01b1916600160a01b91151591909102179055565b60075490565b600080546001600160a01b0316331480610ab257506001546001600160a01b031633145b610ace5760405162461bcd60e51b8152600401610557906111d8565b61050e610adb8484610f8e565b6001610f28565b600080546001600160a01b0316331480610b0657506001546001600160a01b031633145b610b225760405162461bcd60e51b8152600401610557906111d8565b61050e61056c8484610f8e565b6000546001600160a01b0316331480610b5257506001546001600160a01b031633145b610b6e5760405162461bcd60e51b8152600401610557906111d8565b600780546001019055565b600080546001600160a01b0316331480610b9d57506001546001600160a01b031633145b610bb95760405162461bcd60e51b8152600401610557906111d8565b6000610bc58484610f8e565b9050600260008281526005602052604090205460ff166003811115610be657fe5b14610bf5576000915050610511565b6000908152600560205260409020805460ff1916600317905550506007805460001901905550600190565b6001600160a01b0316600090815260026020526040902060030154151590565b6000546001600160a01b0316331480610c6357506001546001600160a01b031633145b610c7f5760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b0392831660009081526002602052604090206004810180546001600160a01b031916939094169290921790925560030155565b6001600160a01b031660009081526002602052604090205490565b600080546001600160a01b03838116911614806104b25750506001546001600160a01b0390811691161490565b600080610d0d83610ef8565b90506003610738565b60065490565b6000546001600160a01b0316331480610d3f57506001546001600160a01b031633145b610d5b5760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b03909116600090815260026020526040902055565b600080546001600160a01b0316331480610d9b57506001546001600160a01b031633145b610db75760405162461bcd60e51b8152600401610557906111d8565b6104b2610adb83610ef8565b610dcb610fc1565b506001600160a01b03908116600090815260026020818152604092839020835160c08101855281548152600182015492810192909252918201549281019290925260038101546060830152600401549182166080820152600160a01b90910460ff16151560a082015290565b6000546001600160a01b0316331480610e5a57506001546001600160a01b031633145b610e765760405162461bcd60e51b8152600401610557906111d8565b6001600160a01b03166000908152600260208190526040909120600181557f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421918101919091557fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706003820155600401805460ff60a01b1916600160a01b179055565b600081604051602001610f0b9190611171565b604051602081830303815290604052805190602001209050919050565b600080826003811115610f3757fe5b60008581526005602052604090205460ff166003811115610f5457fe5b101590508061050e576000848152600560205260409020805484919060ff19166001836003811115610f8257fe5b02179055509392505050565b60008282604051602001610fa392919061118e565b60405160208183030381529060405280519060200120905092915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b80356001600160a01b03811681146104b557600080fd5b803580151581146104b557600080fd5b60006020828403121561102e578081fd5b61050e82610ff6565b60008060006060848603121561104b578182fd5b61105484610ff6565b925061106260208501610ff6565b9150604084013590509250925092565b60008060408385031215611084578182fd5b61108d83610ff6565b946020939093013593505050565b6000806000606084860312156110af578283fd5b6110b884610ff6565b95602085013595506040909401359392505050565b60008082840360e08112156110e0578283fd5b6110e984610ff6565b925060c0601f19820112156110fc578182fd5b5060405160c0810181811067ffffffffffffffff8211171561111a57fe5b80604052506020840135815260408401356020820152606084013560408201526080840135606082015261115060a08501610ff6565b608082015261116160c0850161100d565b60a0820152809150509250929050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b60208082526036908201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792061604082015275757468656e746963617465642061646472657373657360501b606082015260800190565b815181526020808301519082015260408083015190820152606080830151908201526080808301516001600160a01b03169082015260a09182015115159181019190915260c0019056fea164736f6c6343000706000a", + "codeHash": "0x15816cecbe67cb89869de889f04b59682cd9654ed4f5083bf929891905ff7cb7", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x17ec8597ff92c3f44523bdc65bf0f1be632917ff", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0006" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "commitAccount", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "commitContractStorage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "address", + "name": "_ethAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_codeHash", + "type": "bytes32" + } + ], + "name": "commitPendingAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getAccount", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "storageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "codeHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "isFresh", + "type": "bool" + } + ], + "internalType": "struct Lib_OVMCodec.Account", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getAccountEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getAccountNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getAccountStorageRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getContractStorage", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalUncommittedAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalUncommittedContractStorage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "hasAccount", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "hasContractStorage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "hasEmptyAccount", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementTotalUncommittedAccounts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "incrementTotalUncommittedContractStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "initPendingAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isAuthenticated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ovmExecutionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "storageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "codeHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "isFresh", + "type": "bool" + } + ], + "internalType": "struct Lib_OVMCodec.Account", + "name": "_account", + "type": "tuple" + } + ], + "name": "putAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_value", + "type": "bytes32" + } + ], + "name": "putContractStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "putEmptyAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "setAccountNonce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_ovmExecutionManager", + "type": "address" + } + ], + "name": "setExecutionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "testAndSetAccountChanged", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "testAndSetAccountLoaded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "testAndSetContractStorageChanged", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "testAndSetContractStorageLoaded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "wasAccountChanged", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "wasAccountCommitted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "wasContractStorageChanged", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "wasContractStorageCommitted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_ECDSAContractAccount": { + "address": "0x4200000000000000000000000000000000000003", + "code": "0x6080604052600436106100295760003560e01c80631626ba7e1461002b5780635ee46ac914610072575b005b5a61003461129f565b8015610048576000806100456112f9565b50505b5061005c610057366004611654565b6100b1565b60405161006991906118c8565b60405180910390f35b5a61007b61129f565b801561008f5760008061008c6112f9565b50505b506100a361009e3660046116ab565b610146565b60405161006992919061186e565b60005a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b6040811015610109576000828201526020016100f2565b5050506001600160a01b031661011f848461046e565b6001600160a01b03161461013457600061013d565b630b135d3f60e11b5b90505b92915050565b60006060610152610501565b6001600160a01b03166101648461056e565b6001600160a01b03161461019c5760405162461bcd60e51b815260040161018a9061192f565b604051809103906101996112f9565b50505b6101a46105f5565b836101200151146101d95760405162461bcd60e51b81526004016101c7906119cf565b604051809103906101d66112f9565b50505b6101e1610634565b8351146102125760405162461bcd60e51b815260040161020090611a72565b6040518091039061020f6112f9565b50505b6006602160991b0163a9059cbb6011602160991b0161023960408701518760200151610673565b6040518363ffffffff1660e01b8152600401610256929190611855565b6020604051808303816000878061026b611364565b1580156102805760008061027d6112f9565b50505b505a61028a6113b0565b5050505050501580156102aa573d6000803e3d60006102a76112f9565b50505b50505050604051601f3d908101601f191682016040526102cd919081019061162f565b6102fb5760405162461bcd60e51b81526004016102e99061198c565b604051809103906102f86112f9565b50505b826101600151156103985782608001511561033a5760405162461bcd60e51b8152600401610328906118dd565b604051809103906103376112f9565b50505b60008061034a8560a001516106db565b90925090506001600160a01b0382161561038b576001826040516020016103719190611841565b604051602081830303815290604052935093505050610469565b6000935091506104699050565b6103a0610885565b6103a8610501565b6001600160a01b031683606001516001600160a01b031614156103ef5760405162461bcd60e51b81526004016103dd90611a15565b604051809103906103ec6112f9565b50505b82606001516001600160a01b031683608001518460a0015160405161041491906117f8565b60006040518083038185875a6104286113b0565b505050505050925050503d806000811461045e576040513d603f01601f191681016040523d815291503d6000602084013e610463565b606091505b50915091505b915091565b600081516041146104ce5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401604051809103906104cb6112f9565b50505b60008060006020850151925060408501519150606085015160001a90506104f7868285856108c4565b9695505050505050565b600080610540604051602401604051601f1981830301815260409190915263996d79a560e01b6020820180516001600160e01b03169091179052610a70565b9050602081018151602081101561055f5760008061055c6112f9565b50505b81019080805194505050505090565b6000600161057b83610b50565b836101400151601b018460e00151856101000151604051600081526020016040526040516105ac94939291906118aa565b6020604051602081039080840390855a6105c46114a1565b50505050501580156105e3573d6000803e3d60006105e06112f9565b50505b5050506020604051035190505b919050565b600080610540604051602401604051601f1981830301815260409190915263482c012b60e11b6020820180516001600160e01b03169091179052610a70565b600080610540604051602401604051601f198183030181526040919091526360fd975160e11b6020820180516001600160e01b03169091179052610a70565b60008261068257506000610140565b8282028284828161068f57fe5b041461013d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611b7760219139604001915050604051809103906106d26112f9565b50509392505050565b60006060600061078a846040516024018080602001828103825283818151815260200191508051906020019080838360005b8381101561072557808201518382015260200161070d565b50505050905090810190601f1680156107525780820380516001836020036101000a031916815260200191505b5092505050604051601f198183030181526040919091526314aa2ff760e01b6020820180516001600160e01b03169091179052610a70565b905060208101815160408110156107a9576000806107a66112f9565b50505b810190808051929190602001805160405193929190846401000000008211156107da576000806107d76112f9565b50505b9083019060208201858111156107f8576000806107f56112f9565b50505b825164010000000081118282018810171561081b576000806108186112f9565b50505b825250602001908051906020019080838360005b8381101561084757808201518382015260200161082f565b50505050905090810190601f1680156108745780820380516001836020036101000a031916815260200191505b506040525050509250925050915091565b6108c1604051602401604051601f19818303018152604091909152631f3aefa560e21b6020820180516001600160e01b03169091179052610a70565b50565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561092e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611b33602291396040019150506040518091039061092b6112f9565b50505b8360ff16601b148061094357508360ff16601c145b6109875760405162461bcd60e51b8152600401808060200182810382526022815260200180611b5560229139604001915050604051809103906109846112f9565b50505b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855a6109d96114a1565b50505050501580156109f8573d6000803e3d60006109f56112f9565b50505b5050506020604051035190506001600160a01b038116610a675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640160405180910390610a646112f9565b50505b95945050505050565b6060600080600b602160991b01846040518082805190602001908083835b60208310610aad5780518252601f199092019160209182019101610a8e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855a610ae5611568565b50505050509150503d8060008114610b19576040513d603f01601f191681016040523d815291503d6000602084013e610b1e565b606091505b50909250905060018215151415610b385791506105f09050565b805160208201610b466112f9565b50505b5050919050565b6000610b5c8282610b69565b8051906020012092915050565b606060006009604051908082528060200260200182016040528015610ba257816020015b6060815260200190600190039081610b8d5790505b509050610baf8451610dd1565b81600081518110610bbc57fe5b6020026020010181905250610bd48460200151610dd1565b81600181518110610be157fe5b6020026020010181905250610bf98460400151610dd1565b81600281518110610c0657fe5b602002602001018190525083610160015115610c4f57610c326040516020810160405260008152610ddf565b81600381518110610c3f57fe5b6020026020010181905250610c75565b610c5c8460600151610e48565b81600381518110610c6957fe5b60200260200101819052505b610c828460800151610dd1565b81600481518110610c8f57fe5b6020026020010181905250610ca78460a00151610ddf565b81600581518110610cb457fe5b60200260200101819052508215610d3d57610cd58460c0015160ff16610dd1565b81600681518110610ce257fe5b6020026020010181905250610cfa8460e00151610e72565b81600781518110610d0757fe5b6020026020010181905250610d20846101000151610e72565b81600881518110610d2d57fe5b6020026020010181905250610dc0565b610d4b846101200151610dd1565b81600681518110610d5857fe5b6020026020010181905250610d796040516020810160405260008152610ddf565b81600781518110610d8657fe5b6020026020010181905250610da76040516020810160405260008152610ddf565b81600881518110610db457fe5b60200260200101819052505b610dc981610e88565b949350505050565b6060610140610ddf83610ecc565b60608082516001148015610e075750608083600081518110610dfd57fe5b602001015160f81c105b15610e13575081610140565b610e1f83516080610fde565b83604051602001610e31929190611814565b604051602081830303815290604052905092915050565b606061014082604051602001610e5e91906117d2565b604051602081830303815290604052610ddf565b606061014082604051602001610e5e91906117ef565b60606000610e958361113e565b9050610ea3815160c0610fde565b81604051602001610eb5929190611814565b604051602081830303815290604052915050919050565b6060600082604051602001610ee191906117ef565b604051602081830303815290604052905060005b6020811015610f2b57818181518110610f0a57fe5b60200101516001600160f81b03191615610f2357610f2b565b600101610ef5565b60008160200367ffffffffffffffff81118015610f5057600080610f4d6112f9565b50505b50604051818152601f19601f8301168101602001604052908015610f7b576020820181803683370190505b50905060005b8151811015610fd5576001830192849081518110610f9b57fe5b60200101516001600160f81b031916828281518110610fb657fe5b60200101906001600160f81b031916908160001a905350600101610f81565b50949350505050565b6060806038841015611048576001604051818152601f19601f8301168101602001604052908015611016576020820181803683370190505b50905082840160f81b8160008151811061102c57fe5b60200101906001600160f81b031916908160001a90535061013d565b600060015b80868161105657fe5b041561106b576001909101906101000261104d565b8160010167ffffffffffffffff8111801561108e5760008061108b6112f9565b50505b50604051818152601f19601f83011681016020016040529080156110b9576020820181803683370190505b50925084820160370160f81b836000815181106110d257fe5b60200101906001600160f81b031916908160001a905350600190505b8181116106d2576101008183036101000a878161110757fe5b048161110f57fe5b0660f81b83828151811061111f57fe5b60200101906001600160f81b031916908160001a9053506001016110ee565b6060815161117a576000604051818152601f19601f8301168101602001604052908015611172576020820181803683370190505b5090506105f0565b6000805b83518110156111a85783818151811061119357fe5b6020026020010151519091019060010161117e565b60008267ffffffffffffffff811180156111ca576000806111c76112f9565b50505b50604051818152601f19601f83011681016020016040529080156111f5576020820181803683370190505b50600092509050602081015b8551831015610fd557600086848151811061121857fe5b602002602001015190506020810161123283828451611259565b87858151811061123e57fe5b60200260200101515160019095019490920191506112019050565b8282825b6020811061127d57815183526020928301929190910190601f190161125d565b60001960208290036101000a0180198351168185511617909352505050505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156112f4576000828201526020016112dd565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015611331578086015182820160400152602001611316565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b805160008252935060206112dd565b635b99d1c5598160e01b81526113e1565b8080831115610140575090919050565b8080831015610140575090919050565b8360048201528460248201528560448201526080606482015287608482015260a4810160005b8981101561141f578089015182820152602001611407565b506060828a60c40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af150596114748e3d6113d1565b8d0161148081876113c1565b5b828110156114955760008152602001611481565b50929d50505050505050565b638540661f598160e01b81525b836004820152846024820152606060448201528660648201526084810160005b888110156114e65780880151828201526020016114ce565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af1505961153b8d3d6113d1565b8c0161154781876113c1565b5b8281101561155c5760008152602001611548565b50929c50505050505050565b63ffe73914598160e01b81526114ae565b80356001600160a01b03811681146105f057600080610b496112f9565b80356105f081611b1e565b600082601f8301126115ba5780816115b76112f9565b50505b813567ffffffffffffffff8111156115ce57fe5b6115e1601f8201601f1916602001611ac6565b8181528460208386010111156115fe5782836115fb6112f9565b50505b816020850160208301379081016020019190915292915050565b803560ff811681146105f057600080610b496112f9565b6000602082840312156116495780816116466112f9565b50505b815161013d81611b1e565b6000806040838503121561166f57808161166c6112f9565b50505b82359150602083013567ffffffffffffffff8111156116955781826116926112f9565b50505b6116a1858286016115a1565b9150509250929050565b6000602082840312156116c55780816116c26112f9565b50505b813567ffffffffffffffff808211156116e55782836116e26112f9565b50505b81840191506101808083870312156117045783846117016112f9565b50505b61170d81611ac6565b905082358152602083013560208201526040830135604082015261173360608401611579565b60608201526080830135608082015260a08301358281111561175c5784856117596112f9565b50505b611768878286016115a1565b60a08301525061177a60c08401611618565b60c082015260e083810135908201526101008084013590820152610120808401359082015261014091506117af828401611618565b8282015261016091506117c3828401611596565b91810191909152949350505050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b90815260200190565b6000825161180a818460208701611aee565b9190910192915050565b60008351611826818460208801611aee565b82018351611838818360208801611aee565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b60008315158252604060208301528251806040840152611895816060850160208701611aee565b601f01601f1916919091016060019392505050565b93845260ff9290921660208401526040830152606082015260800190565b6001600160e01b031991909116815260200190565b60208082526032908201527f56616c7565207472616e7366657220696e20636f6e747261637420637265617460408201527134b7b7103737ba1039bab83837b93a32b21760711b606082015260800190565b6020808252603c908201527f5369676e61747572652070726f766964656420666f7220454f41207472616e7360408201527f616374696f6e20657865637574696f6e20697320696e76616c69642e00000000606082015260800190565b60208082526023908201527f46656520776173206e6f74207472616e7366657272656420746f2072656c617960408201526232b91760e91b606082015260800190565b60208082526026908201527f5472616e73616374696f6e207369676e656420776974682077726f6e67206368604082015265185a5b88125160d21b606082015260800190565b6020808252603d908201527f43616c6c7320746f2073656c66206172652064697361626c656420756e74696c60408201527f207570677261646162696c6974792069732072652d656e61626c65642e000000606082015260800190565b60208082526034908201527f5472616e73616374696f6e206e6f6e636520646f6573206e6f74206d61746368604082015273103a34329032bc3832b1ba32b2103737b731b29760611b606082015260800190565b6000604051905081810181811067ffffffffffffffff82111715611ae657fe5b604052919050565b60005b83811015611b09578082015183820152602001611af1565b83811115611b18576000848401525b50505050565b80151581146108c1576000806112f46112f956fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77", + "codeHash": "0x703326a89a733cbd1bc2f60b9fb59b756f226457f0553d64e6bf04a18697ab0d", + "storage": {}, + "abi": [ + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "recoveryParam", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "isCreate", + "type": "bool" + } + ], + "internalType": "struct Lib_EIP155Tx.EIP155Tx", + "name": "_transaction", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, + "OVM_SequencerEntrypoint": { + "address": "0x4200000000000000000000000000000000000005", + "code": "0x60806040525a61000d6114be565b80156100215760008061001e611518565b50505b50600080368080601f0160208091040260200160405190810160405281815292919060208401838380828437600092018290525093945061006f925084915061006a905061018f565b6101fc565b9050600061007c8261039c565b9050600081610089611583565b15905080156100b4576100b461009e84610423565b8461014001518560e0015186610100015161043c565b6000806001600160a01b038416635ee46ac960e01b866040516024016100da9190611938565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03169091179052604051610115919061187d565b6000604051808303816000865a61012a6115cf565b5050505050509150503d806000811461015f576040513d603f01601f191681016040523d815291503d6000602084013e610164565b606091505b5091509150811561017757805160208201f35b805160208201610185611518565b5050505050505050005b6000806101ce604051602401604051601f1981830301815260409190915263482c012b60e11b6020820180516001600160e01b0316909117905261049f565b905060208101815160208110156101ed576000806101ea611518565b50505b81019080805194505050505090565b6102046116c0565b600061020f8461057e565b905060006102308260068151811061022357fe5b6020026020010151610591565b905060006023856002028360ff160303905060028160ff16106102775760405162461bcd60e51b8152600401610265906118e4565b60405180910390610274611518565b50505b60006102968460038151811061028957fe5b602002602001015161059c565b511590506040518061018001604052806102b68660008151811061022357fe5b81526020016102cb8660018151811061022357fe5b81526020016102e08660028151811061022357fe5b8152602001610302866003815181106102f557fe5b6020026020010151610633565b6001600160a01b031681526020016103208660048151811061022357fe5b81526020016103358660058151811061028957fe5b81526020018460ff1681526020016103608660078151811061035357fe5b60200260200101516106ae565b81526020016103758660088151811061035357fe5b81526020018781526020018360ff1681526020018215158152509450505050505b92915050565b600060016103a983610423565b836101400151601b018460e00151856101000151604051600081526020016040526040516103da94939291906118c6565b6020604051602081039080840390855a6103f2611722565b5050505050158015610411573d6000803e3d600061040e611518565b50505b5050506020604051035190505b919050565b600061042f82826107bc565b8051906020012092915050565b61049884848484604051602481019490945260ff90921660448401526064830152608482015260a401604051601f1981830301815260409190915263741a33eb60e01b6020820180516001600160e01b0316909117905261049f565b5050505050565b6060600080600b602160991b01846040518082805190602001908083835b602083106104dc5780518252601f1990920191602091820191016104bd565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855a6105146117e9565b50505050509150503d8060008114610548576040513d603f01601f191681016040523d815291503d6000602084013e61054d565b606091505b5090925090506001821515141561056757915061041e9050565b805160208201610575611518565b50505050919050565b606061039661058c83610a24565b610a4c565b6000610396826106ae565b606060008060006105ac85610bd8565b9194509250905060008160018111156105c157fe5b1461061b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640160405180910390610618611518565b50505b61062a85602001518484610f33565b95945050505050565b60008151600114156106475750600061041e565b81516015146106a55760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020616464726573732076616c75652e0000000000006044820152606401604051809103906106a2611518565b50505b61039682610591565b600060218251111561070f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016040518091039061070c611518565b50505b600080600061071d85610bd8565b91945092509050600081600181111561073257fe5b1461078c5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640160405180910390610789611518565b50505b600083866020015101905060008151905060208410156107b25760208490036101000a90045b9695505050505050565b6060600060096040519080825280602002602001820160405280156107f557816020015b60608152602001906001900390816107e05790505b5090506108028451610fe7565b8160008151811061080f57fe5b60200260200101819052506108278460200151610fe7565b8160018151811061083457fe5b602002602001018190525061084c8460400151610fe7565b8160028151811061085957fe5b6020026020010181905250836101600151156108a2576108856040516020810160405260008152610ff5565b8160038151811061089257fe5b60200260200101819052506108c8565b6108af846060015161105e565b816003815181106108bc57fe5b60200260200101819052505b6108d58460800151610fe7565b816004815181106108e257fe5b60200260200101819052506108fa8460a00151610ff5565b8160058151811061090757fe5b60200260200101819052508215610990576109288460c0015160ff16610fe7565b8160068151811061093557fe5b602002602001018190525061094d8460e00151611088565b8160078151811061095a57fe5b6020026020010181905250610973846101000151611088565b8160088151811061098057fe5b6020026020010181905250610a13565b61099e846101200151610fe7565b816006815181106109ab57fe5b60200260200101819052506109cc6040516020810160405260008152610ff5565b816007815181106109d957fe5b60200260200101819052506109fa6040516020810160405260008152610ff5565b81600881518110610a0757fe5b60200260200101819052505b610a1c8161109e565b949350505050565b610a2c6117fa565b602082016040518060400160405280845181526020019190915292915050565b6060600080610a5a84610bd8565b91935090915060019050816001811115610a7057fe5b14610aca5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e000000000000000000604482015260640160405180910390610ac7611518565b50505b60006020604051908082528060200260200182016040528015610b0757816020015b610af46117fa565b815260200190600190039081610aec5790505b5090506000835b8651811015610bcd5760208210610b5f5760405162461bcd60e51b815260040180806020018281038252602a815260200180611a2c602a913960400191505060405180910390610b5c611518565b50505b600080610b876040516040808201905280858c51038152602001858c60200151019052610bd8565b509150915060405180604001604052808383018152602001848b60200151019052858581518110610bb457fe5b6020908102919091010152600193909301920101610b0e565b508152949350505050565b6000808080845111610c395760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640160405180910390610c36611518565b50505b6000846020015190506000815160001a9050607f8111610c66576000600160009450945094505050610f2c565b60b78111610ce257607f19810180875111610cd05760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640160405180910390610ccd611518565b50505b60019550935060009250610f2c915050565b60bf8111610dd25760b619810180875111610d4c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640160405180910390610d49611518565b50505b6000816020036101000a6001850151049050818101885111610dbd5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640160405180910390610dba611518565b50505b60019091019550935060009250610f2c915050565b60f78111610e4d5760bf19810180875111610e3c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640160405180910390610e39611518565b50505b600195509350849250610f2c915050565b60f619810180875111610eaf5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640160405180910390610eac611518565b50505b6000816020036101000a6001850151049050818101885111610f195760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b604482015260640160405180910390610f16611518565b50505b6001918201965094509250610f2c915050565b9193909250565b606060008267ffffffffffffffff81118015610f5757600080610f54611518565b50505b50604051818152601f19601f8301168101602001604052908015610f82576020820181803683370190505b5090508051610f92579050610fe0565b8484016020820160005b60208604811015610fbd578251825260209283019290910190600101610f9c565b50600019601f86166020036101000a018082511681198451161790915250909150505b9392505050565b6060610396610ff5836110e2565b6060808251600114801561101d575060808360008151811061101357fe5b602001015160f81c105b15611029575081610396565b611035835160806111f4565b83604051602001611047929190611899565b604051602081830303815290604052905092915050565b6060610396826040516020016110749190611857565b604051602081830303815290604052610ff5565b6060610396826040516020016110749190611874565b606060006110ab8361135d565b90506110b9815160c06111f4565b816040516020016110cb929190611899565b604051602081830303815290604052915050919050565b60606000826040516020016110f79190611874565b604051602081830303815290604052905060005b60208110156111415781818151811061112057fe5b60200101516001600160f81b0319161561113957611141565b60010161110b565b60008160200367ffffffffffffffff8111801561116657600080611163611518565b50505b50604051818152601f19601f8301168101602001604052908015611191576020820181803683370190505b50905060005b81518110156111eb5760018301928490815181106111b157fe5b60200101516001600160f81b0319168282815181106111cc57fe5b60200101906001600160f81b031916908160001a905350600101611197565b50949350505050565b606080603884101561125e576001604051818152601f19601f830116810160200160405290801561122c576020820181803683370190505b50905082840160f81b8160008151811061124257fe5b60200101906001600160f81b031916908160001a905350610fe0565b600060015b80868161126c57fe5b04156112815760019091019061010002611263565b8160010167ffffffffffffffff811180156112a4576000806112a1611518565b50505b50604051818152601f19601f83011681016020016040529080156112cf576020820181803683370190505b50925084820160370160f81b836000815181106112e857fe5b60200101906001600160f81b031916908160001a905350600190505b818111611354576101008183036101000a878161131d57fe5b048161132557fe5b0660f81b83828151811061133557fe5b60200101906001600160f81b031916908160001a905350600101611304565b50509392505050565b60608151611399576000604051818152601f19601f8301168101602001604052908015611391576020820181803683370190505b50905061041e565b6000805b83518110156113c7578381815181106113b257fe5b6020026020010151519091019060010161139d565b60008267ffffffffffffffff811180156113e9576000806113e6611518565b50505b50604051818152601f19601f8301168101602001604052908015611414576020820181803683370190505b50600092509050602081015b85518310156111eb57600086848151811061143757fe5b602002602001015190506020810161145183828451611478565b87858151811061145d57fe5b60200260200101515160019095019490920191506114209050565b8282825b6020811061149c57815183526020928301929190910190601f190161147c565b60001960208290036101000a0180198351168185511617909352505050505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015611513576000828201526020016114fc565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015611550578086015182820160400152602001611535565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b805160008252935060206114fc565b635b99d1c5598160e01b8152611600565b8080831115610396575090919050565b8080831015610396575090919050565b8360048201528460248201528560448201526080606482015287608482015260a4810160005b8981101561163e578089015182820152602001611626565b506060828a60c40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af150596116938e3d6115f0565b8d0161169f81876115e0565b5b828110156116b457600081526020016116a0565b50929d50505050505050565b6040516101808101604090815260008083526020830181905290820181905260608083018290526080830182905260a083015260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290565b638540661f598160e01b81525b836004820152846024820152606060448201528660648201526084810160005b8881101561176757808801518282015260200161174f565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596117bc8d3d6115f0565b8c016117c881876115e0565b5b828110156117dd57600081526020016117c9565b50929c50505050505050565b63ffe73914598160e01b815261172f565b604051604080820190526000808252602082015290565b6001600160a01b03169052565b15159052565b6000815180845261183c8160208601602086016119fb565b601f01601f19169290920160200192915050565b60ff169052565b60609190911b6bffffffffffffffffffffffff1916815260140190565b90815260200190565b6000825161188f8184602087016119fb565b9190910192915050565b600083516118ab8184602088016119fb565b820183516118bd8183602088016119fb565b01949350505050565b93845260ff9290921660208401526040830152606082015260800190565b60208082526034908201527f4c69625f45495031353554783a205472616e73616374696f6e207369676e6564604082015273081dda5d1a081ddc9bdb99c818da185a5b88125160621b606082015260800190565b600060208252825160208301526020830151604083015260408301516060830152606083015161196b6080840182611811565b50608083015160a083015260a08301516101808060c08501526119926101a0850183611824565b915060c08501516119a660e0860182611850565b5060e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101606119e881870183611850565b808701519150506113548286018261181e565b60005b83811015611a165780820151838201526020016119fe565b83811115611a25576000848401525b5050505056fe50726f766964656420524c50206c6973742065786365656473206d6178206c697374206c656e6774682e", + "codeHash": "0x06b73a1bc3a7f6b27878db42ef40fea5b1371bb6ecf3216bb6b3c6f194110ff4", + "storage": {}, + "abi": [ + { + "stateMutability": "nonpayable", + "type": "fallback" + } + ] + }, + "OVM_ETH": { + "address": "0x4200000000000000000000000000000000000006", + "code": "0x6080604052600436106101095760003560e01c806370a0823111610095578063a9059cbb11610064578063a9059cbb14610539578063ae1f6aaf1461058c578063c01e1bd6146105ce578063d0e30db014610109578063dd62ed3e146105f457610109565b806370a082311461042057806395d89b411461046d5780639dc29fac14610493578063a457c2d7146104e657610109565b806323b872dd116100dc57806323b872dd1461029d5780632e1a7d4d146102fa578063313ce5671461033e578063395093511461037a57806340c10f19146103cd57610109565b806301ffc9a71461011357806306fdde0314610175578063095ea7b31461021257806318160ddd14610265575b610111610649565b005b5a61011c6113c9565b80156101305760008061012d61141e565b50505b50610161600480360360208110156101505760008061014d61141e565b50505b50356001600160e01b03191661070b565b604051901515815260200160405180910390f35b5a61017e6113c9565b80156101925760008061018f61141e565b50505b5061019b610769565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d75780820151838201526020016101bf565b50505050905090810190601f1680156102045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5a61021b6113c9565b801561022f5760008061022c61141e565b50505b506101616004803603604081101561024f5760008061024c61141e565b50505b506001600160a01b038135169060200135610826565b5a61026e6113c9565b80156102825760008061027f61141e565b50505b5061028b610843565b60405190815260200160405180910390f35b5a6102a66113c9565b80156102ba576000806102b761141e565b50505b50610161600480360360608110156102da576000806102d761141e565b50505b506001600160a01b03813581169160208101359091169060400135610854565b5a6103036113c9565b80156103175760008061031461141e565b50505b50610111600480360360208110156103375760008061033461141e565b50505b50356108e8565b5a6103476113c9565b801561035b5760008061035861141e565b50505b50610364610956565b60405160ff909116815260200160405180910390f35b5a6103836113c9565b80156103975760008061039461141e565b50505b50610161600480360360408110156103b7576000806103b461141e565b50505b506001600160a01b038135169060200135610972565b5a6103d66113c9565b80156103ea576000806103e761141e565b50505b506101116004803603604081101561040a5760008061040761141e565b50505b506001600160a01b0381351690602001356109d7565b5a6104296113c9565b801561043d5760008061043a61141e565b50505b5061028b6004803603602081101561045d5760008061045a61141e565b50505b50356001600160a01b0316610ab3565b5a6104766113c9565b801561048a5760008061048761141e565b50505b5061019b610ad9565b5a61049c6113c9565b80156104b0576000806104ad61141e565b50505b50610111600480360360408110156104d0576000806104cd61141e565b50505b506001600160a01b038135169060200135610b7f565b5a6104ef6113c9565b80156105035760008061050061141e565b50505b50610161600480360360408110156105235760008061052061141e565b50505b506001600160a01b038135169060200135610c5b565b5a6105426113c9565b80156105565760008061055361141e565b50505b50610161600480360360408110156105765760008061057361141e565b50505b506001600160a01b038135169060200135610cd1565b5a6105956113c9565b80156105a9576000806105a661141e565b50505b506105b2610ce5565b6040516001600160a01b03909116815260200160405180910390f35b5a6105d76113c9565b80156105eb576000806105e861141e565b50505b506105b2610d04565b5a6105fd6113c9565b80156106115760008061060e61141e565b50505b5061028b600480360360408110156106315760008061062e61141e565b50505b506001600160a01b0381358116916020013516610d10565b6106bc5a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b60408110156106a25760008282015260200161068b565b5050505a6106ae611489565b5a6106b76113c9565b610d50565b5a6106c5611489565b6001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c5a6106f86113c9565b60405190815260200160405180910390a2565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2631d1d8b6360e01b6001600160e01b031984166301ffc9a760e01b148061076157506001600160e01b0319848116908216145b949350505050565b60606003806107766114cf565b600181600116156101000203166002900480601f0160208091040260200160405190810160405281815291906020830182806107b06114cf565b6001816001161561010002031660029004801561081c5780601f106107ea5761010080836107dc6114cf565b04028352916020019161081c565b820191906000526020600020905b816108016114cf565b815290600101906020018083116107f857829003601f168201915b5050505050905090565b600061083a610833610eee565b8484610ef9565b50600192915050565b6000600261084f6114cf565b905090565b6000610861848484610d50565b6108de8461086d610eee565b6108d9856040516060810160405260288082526115f760208301396001600160a01b038a16600090815260016020526040902060006108aa610eee565b6001600160a01b03166001600160a01b031681526020019081526020016000206108d26114cf565b9190611021565b610ef9565b5060019392505050565b806108fa5a6108f5611489565b610ab3565b101561090e5760008061090b61141e565b50505b5a610917611489565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405190815260200160405180910390a250565b60008060056109636114cf565b906101000a900460ff16905090565b600061083a61097f610eee565b846108d98560016000610990610eee565b6001600160a01b03166001600160a01b031681526020019081526020016000206001600160a01b0389166000908152602091909152604090206109d16114cf565b906110c1565b600060066109e36114cf565b906101000a90046001600160a01b03166001600160a01b03165a610a05611489565b6001600160a01b031614610a685760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640160405180910390610a6561141e565b50505b610a728282611129565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405190815260200160405180910390a25050565b6001600160a01b0381166000908152602081905260408120610ad36114cf565b92915050565b6060600480610ae66114cf565b600181600116156101000203166002900480601f016020809104026020016040519081016040528181529190602083018280610b206114cf565b6001816001161561010002031660029004801561081c5780601f10610b4c5761010080836107dc6114cf565b820191906000526020600020905b81610b636114cf565b81529060010190602001808311610b5a57509395945050505050565b60006006610b8b6114cf565b906101000a90046001600160a01b03166001600160a01b03165a610bad611489565b6001600160a01b031614610c105760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640160405180910390610c0d61141e565b50505b610c1a8282611242565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405190815260200160405180910390a25050565b600061083a610c68610eee565b846108d985604051606081016040526025808252611689602083013960016000610c90610eee565b6001600160a01b03166001600160a01b031681526020019081526020016000206001600160a01b038a166000908152602091909152604090206108d26114cf565b600061083a610cde610eee565b8484610d50565b60006006610cf16114cf565b906101000a90046001600160a01b031681565b60016005610cf16114cf565b6001600160a01b03821660009081526001602052604081206001600160a01b038316600090815260209190915260409020610d496114cf565b9392505050565b6001600160a01b038316610d9e5760405162461bcd60e51b81526004018080602001828103825260258152602001806116406025913960400191505060405180910390610d9b61141e565b50505b6001600160a01b038216610dec5760405162461bcd60e51b815260040180806020018281038252602381526020018061156a6023913960400191505060405180910390610de961141e565b50505b610df7838383611362565b610e32816040516060810160405260268082526115d160208301396001600160a01b03861660009081526020819052604090206108d26114cf565b6001600160a01b03841660009081526020819052604090208190610e5461151b565b5050506001600160a01b03821660009081526020819052610e7d908290604090206109d16114cf565b6001600160a01b03831660009081526020819052604090208190610e9f61151b565b505050816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a3505050565b60005a61084f611489565b6001600160a01b038316610f475760405162461bcd60e51b81526004018080602001828103825260248152602001806116656024913960400191505060405180910390610f4461141e565b50505b6001600160a01b038216610f955760405162461bcd60e51b81526004018080602001828103825260228152602001806115af6022913960400191505060405180910390610f9261141e565b50505b6001600160a01b038316600090815260016020528190604090206001600160a01b0384166000908152602091909152604090208190610fd261151b565b505050816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405190815260200160405180910390a3505050565b600081848411156110b95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561107557808201518382015260200161105d565b50505050905090810190601f1680156110a25780820380516001836020036101000a031916815260200191505b5092505050604051809103906110b661141e565b50505b505050900390565b600082820183811015610d495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016040518091039061112061141e565b50509392505050565b6001600160a01b03821661118c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016040518091039061118961141e565b50505b61119860008383611362565b6111a68160026109d16114cf565b8060026111b161151b565b5050506001600160a01b038216600090815260208190526111da908290604090206109d16114cf565b6001600160a01b038316600090815260208190526040902081906111fc61151b565b5050506001600160a01b03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b6001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602181526020018061161f602191396040019150506040518091039061128d61141e565b50505b61129c82600083611362565b6112d78160405160608101604052602280825261158d60208301396001600160a01b03851660009081526020819052604090206108d26114cf565b6001600160a01b038316600090815260208190526040902081906112f961151b565b50505061131081600261130a6114cf565b90611367565b80600261131b61151b565b5060009150506001600160a01b0383167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b505050565b6000828211156113c35760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401604051809103906110b961141e565b50900390565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561136257600082820152602001611407565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561145657808601518282016040015260200161143b565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020611407565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020611407565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061140756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f", + "codeHash": "0x6e9b04ab78f5e0bb19e617c8aee0c916c9c858fa4c842d0129f011ee74aa163d", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "2386f26fc10000", + "0x0000000000000000000000000000000000000000000000000000000000000003": "457468657200000000000000000000000000000000000000000000000000000a", + "0x0000000000000000000000000000000000000000000000000000000000000004": "4554480000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000005": "12", + "0x0000000000000000000000000000000000000000000000000000000000000006": "4200000000000000000000000000000000000010", + "0x0cd3b80a8c8beba3d26eacbee57e65fb5b9cc318a308c55ad81761e0a0ea13e2": "1b363a513ad180", + "0x3497465e9e24c7965a4a29f880c7d834b8a2bfed0740222435c37803e660351a": "038d7ea4c68000", + "0x35f18585409b52c7099c3cc3916d0d1d72c8641f4f2fc4e0d91eeb7a6a9715f9": "1ff973cafa8000", + "0x47bc3bda865f98b3ca448677ab379e7e6880127a67aa9bdd1ab3fc5c22099e5c": "04c33979bfae80" + }, + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Token", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Bridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_wad", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "ERC1820Registry": { + "address": "0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a41e7d511161005b578063a41e7d51146101b7578063aabbb8ca146101ed578063b705676514610219578063f712f3e81461026357610088565b806329965a1d1461008d5780633d584063146100c55780635df8122f1461010757806365ba36c114610135575b600080fd5b6100c3600480360360608110156100a357600080fd5b506001600160a01b03813581169160208101359160409091013516610299565b005b6100eb600480360360208110156100db57600080fd5b50356001600160a01b0316610501565b604080516001600160a01b039092168252519081900360200190f35b6100c36004803603604081101561011d57600080fd5b506001600160a01b038135811691602001351661054b565b6101a56004803603602081101561014b57600080fd5b81019060208101813564010000000081111561016657600080fd5b82018360208201111561017857600080fd5b8035906020019184600183028401116401000000008311171561019a57600080fd5b509092509050610624565b60408051918252519081900360200190f35b6100c3600480360360408110156101cd57600080fd5b5080356001600160a01b031690602001356001600160e01b03191661065f565b6100eb6004803603604081101561020357600080fd5b506001600160a01b0381351690602001356106dc565b61024f6004803603604081101561022f57600080fd5b5080356001600160a01b031690602001356001600160e01b031916610753565b604080519115158252519081900360200190f35b61024f6004803603604081101561027957600080fd5b5080356001600160a01b031690602001356001600160e01b0319166107f5565b60006001600160a01b038416156102b057836102b2565b335b9050336102be82610501565b6001600160a01b03161461030b576040805162461bcd60e51b815260206004820152600f60248201526e2737ba103a34329036b0b730b3b2b960891b604482015290519081900360640190fd5b61031483610873565b15610366576040805162461bcd60e51b815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b6001600160a01b0382161580159061038757506001600160a01b0382163314155b1561049d57604051602001808073455243313832305f4143434550545f4d4147494360601b815250601401905060405160208183030381529060405280519060200120826001600160a01b031663249cb3fa85846040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b50511461049d576040805162461bcd60e51b815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b6001600160a01b0381811660008181526020818152604080832088845290915280822080546001600160a01b0319169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b6001600160a01b03818116600090815260016020526040812054909116610529575080610546565b506001600160a01b03808216600090815260016020526040902054165b919050565b3361055583610501565b6001600160a01b0316146105a2576040805162461bcd60e51b815260206004820152600f60248201526e2737ba103a34329036b0b730b3b2b960891b604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b0316146105c157806105c4565b60005b6001600160a01b0383811660008181526001602052604080822080546001600160a01b0319169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106698282610753565b610674576000610676565b815b6001600160a01b039283166000818152602081815260408083206001600160e01b03199690961680845295825280832080546001600160a01b0319169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b6000806001600160a01b038416156106f457836106f6565b335b905061070183610873565b15610727578261071182826107f5565b61071c57600061071e565b815b92505050610659565b6001600160a01b0390811660009081526020818152604080832086845290915290205416905092915050565b60008080610768856301ffc9a760e01b610880565b9092509050811580610778575080155b1561078857600092505050610659565b61079a856001600160e01b0319610880565b90925090508115806107ab57508015155b156107bb57600092505050610659565b6107c58585610880565b90925090506001821480156107da5750806001145b156107ea57600192505050610659565b506000949350505050565b6001600160a01b03821660009081526002602090815260408083206001600160e01b03198516845290915281205460ff1661083b576108348383610753565b9050610659565b506001600160a01b038083166000818152602081815260408083206001600160e01b0319871684529091529020549091161492915050565b6001600160e01b03161590565b6040516301ffc9a760e01b8082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea164736f6c6343000706000a", + "codeHash": "0xff5cc4f5a57b94db7936e35586bb5f8a270dc9d14b264fe4efbe826de694c9a3", + "storage": {}, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "interfaceHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "implementer", + "type": "address" + } + ], + "name": "InterfaceImplementerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "ManagerChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_interfaceHash", + "type": "bytes32" + } + ], + "name": "getInterfaceImplementer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "getManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "implementsERC165Interface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "implementsERC165InterfaceNoCache", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_interfaceName", + "type": "string" + } + ], + "name": "interfaceHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_interfaceHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_implementer", + "type": "address" + } + ], + "name": "setInterfaceImplementer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "address", + "name": "_newManager", + "type": "address" + } + ], + "name": "setManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "updateERC165Cache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_ProxyEOA": { + "address": "0x4200000000000000000000000000000000000009", + "code": "0x6080604052600436106100295760003560e01c80630900f010146100c8578063aaf10f4214610117575b600080610034610159565b6001600160a01b0316600036604051808383808284378083019250505092505050600060405180830381855a610068610405565b50505050509150503d806000811461009c576040513d603f01601f191681016040523d815291503d6000602084013e6100a1565b606091505b509150915081156100b457805160208201f35b8051602082016100c26104f2565b50505050005b5a6100d161055d565b80156100e5576000806100e26104f2565b50505b5061011560048036036020811015610105576000806101026104f2565b50505b50356001600160a01b03166101bf565b005b5a61012061055d565b8015610134576000806101316104f2565b50505b5061013d610159565b6040516001600160a01b03909116815260200160405180910390f35b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101856105b7565b9050600061019282610269565b90506001600160a01b0381166101b3576003602160991b01925050506101bc565b91506101bc9050565b90565b6101c7610270565b6001600160a01b03165a6101d9610603565b6001600160a01b0316146102275760405162461bcd60e51b815260040180806020018281038252603381526020018061069860339139604001915050604051809103906102246104f2565b50505b610230816102dd565b806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b805b919050565b6000806102af604051602401604051601f1981830301815260409190915263996d79a560e01b6020820180516001600160e01b0316909117905261031a565b905060208101815160208110156102ce576000806102cb6104f2565b50505b81019080805194505050505090565b60006102e8826103f9565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610314610649565b50505050565b6060600080600b602160991b01846040518082805190602001908083835b602083106103575780518252601f199092019160209182019101610338565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855a61038f610405565b50505050509150503d80600081146103c3576040513d603f01601f191681016040523d815291503d6000602084013e6103c8565b606091505b509092509050600182151514156103e257915061026b9050565b8051602082016103f06104f2565b50505050919050565b6001600160a01b031690565b63ffe73914598160e01b8152610438565b80808311156104225750815b92915050565b8080831015610422575090919050565b836004820152846024820152606060448201528660648201526084810160005b88811015610470578088015182820152602001610458565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596104c58d3d610428565b8c016104d18187610416565b5b828110156104e657600081526020016104d2565b50929c50505050505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561052a57808601518282016040015260200161050f565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156105b25760008282015260200161059b565b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061059b56fe454f41732063616e206f6e6c792075706772616465207468656972206f776e20454f4120696d706c656d656e746174696f6e2e", + "codeHash": "0xa73df79c90ba2496f3440188807022bed5c7e2e826b596d22bcb4e127378835a", + "storage": {}, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_ExecutionManagerWrapper": { + "address": "0x420000000000000000000000000000000000000B", + "code": "0x60a06020601f3690810182900490910282016040526080818152600092909183918190838280828437600092018290525084519495509384935091505060208401336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b3d604051601f19601f6020840101168101604052818152816000602083013e805160208201f3", + "codeHash": "0x24f818a9ba429702ab1c6837b8109f3c469a6d10168a8bddb0f3e6638014d6f0", + "storage": {}, + "abi": [ + { + "stateMutability": "payable", + "type": "fallback" + } + ] + }, + "OVM_GasPriceOracle": { + "address": "0x420000000000000000000000000000000000000F", + "code": "0x60806040525a61000d610435565b80156100215760008061001e61048a565b50505b50600436106100685760003560e01c8063715018a6146100765780638da5cb5b14610080578063bf1fe420146100a4578063f2fde38b146100ca578063fe173b97146100f9575b60008061007361048a565b50505b61007e610113565b005b610088610215565b6040516001600160a01b03909116815260200160405180910390f35b61007e600480360360208110156100c3576000806100c061048a565b50505b5035610236565b61007e600480360360208110156100e9576000806100e661048a565b50505b50356001600160a01b03166102c4565b610101610418565b60405190815260200160405180910390f35b61011b610425565b6001600160a01b031661012c610215565b6001600160a01b03161461018f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016040518091039061018c61048a565b50505b6000808061019b6104f5565b906101000a90046001600160a01b03166001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000806001816101ee6104f5565b816001600160a01b0302191690836001600160a01b0316021790610210610541565b505050565b600080806102216104f5565b906101000a90046001600160a01b0316905090565b61023e610425565b6001600160a01b031661024f610215565b6001600160a01b0316146102b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401604051809103906102af61048a565b50505b808060016102be610541565b50505050565b6102cc610425565b6001600160a01b03166102dd610215565b6001600160a01b0316146103405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016040518091039061033d61048a565b50505b6001600160a01b03811661038e5760405162461bcd60e51b81526004018080602001828103825260268152602001806105d6602691396040019150506040518091039061038b61048a565b50505b806001600160a01b03166000806103a36104f5565b906101000a90046001600160a01b03166001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060006001816103f66104f5565b816001600160a01b0302191690836001600160a01b03160217906102be610541565b60016104226104f5565b81565b60005a61043061058f565b905090565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561021057600082820152602001610473565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156104c25780860151828201604001526020016104a7565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610473565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b600081526020610473565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061047356fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373", + "codeHash": "0x9a9a9a8dbd861991ef33fe507ee61aca9028ac8dc945438f2cea977f0b0d29a2", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xffffffffffffffffffffffffffffffffffffffff" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_initialGasPrice", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "gasPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasPrice", + "type": "uint256" + } + ], + "name": "setGasPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_SequencerFeeVault": { + "address": "0x4200000000000000000000000000000000000011", + "code": "0x60806040525a61000d610375565b80156100215760008061001e6103cf565b50505b50600436106100525760003560e01c80633ccfd60b14610060578063d3e5792b1461006a578063d4ff921814610084575b60008061005d6103cf565b50505b6100686100a8565b005b61007261034b565b60405190815260200160405180910390f35b61008c610357565b6040516001600160a01b03909116815260200160405180910390f35b60006006602160991b016370a082315a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b604081101561010d576000828201526020016100f6565b5050506040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381868061014a61043a565b15801561015f5760008061015c6103cf565b50505b505a610169610486565b5050505050158015610188573d6000803e3d60006101856103cf565b50505b505050506040513d60208110156101a7576000806101a46103cf565b50505b8101908080519350505067d02ab486cedc000082101590506102035760405162461bcd60e51b815260040180806020018281038252605781526020018061068c60579139606001915050604051809103906102006103cf565b50505b6010602160991b0163a3a795486006602160991b01600080610223610573565b906101000a90046001600160a01b031684600060405160208101604090815260008252518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102ba5780820151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b5096505050505050506000604051808303816000878061030561043a565b15801561031a576000806103176103cf565b50505b505a6103246105bf565b505050505050158015610344573d6000803e3d60006103416103cf565b50505b5050505050565b67d02ab486cedc000081565b600080610362610573565b906101000a90046001600160a01b031681565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156103ca576000828201526020016103b3565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156104075780860151828201604001526020016103ec565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b805160008252935060206103b3565b638540661f598160e01b81526104b9565b80808311156104a35750815b92915050565b80808310156104a3575090919050565b836004820152846024820152606060448201528660648201526084810160005b888110156104f15780880151828201526020016104d9565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596105468d3d6104a9565b8c016105528187610497565b5b828110156105675760008152602001610553565b50929c50505050505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b805160008252935060206103b3565b635b99d1c5598160e01b81528360048201528460248201528560448201526080606482015287608482015260a4810160005b898110156106095780890151828201526020016105f1565b506060828a60c40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af1505961065e8e3d6104a9565b8d0161066a8187610497565b5b8281101561067f576000815260200161066b565b50929d5050505050505056fe4f564d5f53657175656e6365724665655661756c743a207769746864726177616c20616d6f756e74206d7573742062652067726561746572207468616e206d696e696d756d207769746864726177616c20616d6f756e74", + "codeHash": "0x839365e80ae0aeed5f27816c50e61f215ab3807df2b79bd38d31c751e7c5d7d8", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1111111111111111111111111111111111111111" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_l1FeeWallet", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "MIN_WITHDRAWAL_AMOUNT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1FeeWallet", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "Lib_AddressManager": { + "address": "0x4200000000000000000000000000000000000008", + "code": "0x60806040525a61000d610752565b80156100215760008061001e6107a7565b50505b50600436106100685760003560e01c8063715018a6146100765780638da5cb5b146100805780639b2ea4bd146100a4578063bf40fac114610178578063f2fde38b14610241575b6000806100736107a7565b50505b61007e610270565b005b610088610372565b6040516001600160a01b03909116815260200160405180910390f35b61007e600480360360408110156100c3576000806100c06107a7565b50505b8101906020810181356401000000008111156100e7576000806100e46107a7565b50505b820183602082011115610102576000806100ff6107a7565b50505b8035906020019184600183028401116401000000008311171561012d5760008061012a6107a7565b50505b91908080601f0160208091040260200160405190810160405281815292919060208401838380828437600092019190915250929550505090356001600160a01b031691506103939050565b61008860048036036020811015610197576000806101946107a7565b50505b8101906020810181356401000000008111156101bb576000806101b86107a7565b50505b8201836020820111156101d6576000806101d36107a7565b50505b80359060200191846001830284011164010000000083111715610201576000806101fe6107a7565b50505b91908080601f0160208091040260200160405190810160405281815292919060208401838380828437600092019190915250929550610534945050505050565b61007e600480360360208110156102605760008061025d6107a7565b50505b50356001600160a01b0316610573565b6102786106cd565b6001600160a01b0316610289610372565b6001600160a01b0316146102ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401604051809103906102e96107a7565b50505b600080806102f8610812565b906101000a90046001600160a01b03166001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060018161034b610812565b816001600160a01b0302191690836001600160a01b031602179061036d61085e565b505050565b6000808061037e610812565b906101000a90046001600160a01b0316905090565b61039b6106cd565b6001600160a01b03166103ac610372565b6001600160a01b03161461040f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016040518091039061040c6107a7565b50505b600061041a836106dd565b6000818152600160205290915060408120600090610436610812565b906101000a90046001600160a01b031690508260016000848152602001908152602001600020600181610467610812565b816001600160a01b0302191690836001600160a01b031602179061048961085e565b505050836040518082805190602001908083835b602083106104bc5780518252601f19909201916020918201910161049d565b6001836020036101000a038019825116818451161790925250505091909101925060409150505180910390207f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c84836040516001600160a01b039283168152911660208201526040908101905180910390a250505050565b600060016000610543846106dd565b815260200190815260200160002060009061055c610812565b906101000a90046001600160a01b03169050919050565b61057b6106cd565b6001600160a01b031661058c610372565b6001600160a01b0316146105ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401604051809103906105ec6107a7565b50505b6001600160a01b03811661063d5760405162461bcd60e51b81526004018080602001828103825260268152602001806108f3602691396040019150506040518091039061063a6107a7565b50505b806001600160a01b0316600080610652610812565b906101000a90046001600160a01b03166001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060006001816106a5610812565b816001600160a01b0302191690836001600160a01b03160217906106c761085e565b50505050565b60005a6106d86108ac565b905090565b6000816040516020018082805190602001908083835b602083106107125780518252601f1990920191602091820191016106f3565b6001836020036101000a03801982511681845116179092525050509190910192506040915050516020818303038152906040528051906020012092915050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561036d57600082820152602001610790565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156107df5780860151828201604001526020016107c4565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b80516000825293506020610790565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b600081526020610790565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061079056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373", + "codeHash": "0x9ce5fe9a2273a73c31aeddd07c45c6c8f22454a6fa5a581e07ac1644a1eacaf8", + "storage": { + "0xf89bc526c4d0994000ab7be027df744654392ab2d82401b215351441058bd718": "0x4200000000000000000000000000000000000011", + "0x1108348618f290ab3e909faa2f048ab15f5d0f9fe2eac62b52372873c6564728": "0x4200000000000000000000000000000000000009", + "0x4a268d14639fa54a62da41e53d5cfed7d8ef15ff1108a54747e0fd38d7741a68": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0006", + "0x5c2e827bedec24adf1d781771ca0503c801b1637965c73d197cb2ea8857f2921": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0007", + "0x9dc316a765d11a12b06619d367ef78fecac216d290033f772936da756c0d28fe": "0x4200000000000000000000000000000000000003", + "0xb7f250a5c77540e5d0b337d76e65f1b9b5f09d9ef81d3d0985714d60d0362724": "0x4200000000000000000000000000000000000006", + "0xc84bd9b3e8f38f2712e1883dce85edc44c00d63027c6f69fa71b4db32b7b094d": "0x4200000000000000000000000000000000000010", + "0xde24ca96c4b0b6ed2c73bb46c1053b6edd9470cda80c625493502cc81a3ccfa7": "0x4200000000000000000000000000000000000000", + "0xf0b64a30864ef1e4b0c96bb2c6ba336fd423add8e4f685027042faf4a65c6112": "0x4200000000000000000000000000000000000005", + "0xf9123ba7d10387f43e299f0f9f80b307bdbe462c7b3f1ba79dcd3531b9146d0d": "0x1820a4b7618bde71dce8cdc73aab6c95905fad24", + "0xf56747885613486d091c4459f3b37706019a79fb2cf73bde37750a936fe58e30": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0005", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x17ec8597ff92c3f44523bdc65bf0f1be632917ff", + "0x0248c104bff13515d06afb602d097ac0d52680c2d14e6c66219633a4b949f2ef": "0x4200000000000000000000000000000000000007", + "0x24e095abd8bf5f81f3350e6cb0d49574e94e998bfb6341a6ed085c6e3ef4d7fe": "0x4200000000000000000000000000000000000001", + "0x2c71a955ee92899ec739f71eeac0fa56811410db46c65eb51cce754c59755a75": "0x420000000000000000000000000000000000000b", + "0x0c7ceb675ad24a6cab107c6accf2e7a068bab6349dc90b7afe2567eae112c34c": "0x420000000000000000000000000000000000000f", + "0x0cc4bd6bd0492462730f0bcc5303174d0a2af52b1ae68b25e2c7daada2292362": "0x4200000000000000000000000000000000000002" + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "_newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_oldAddress", + "type": "address" + } + ], + "name": "AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "setAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + }, + "OVM_GasMetadata": { + "address": "0x06a506a506a506a506a506a506a506a506a506a5", + "code": "0x00", + "codeHash": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a", + "storage": {}, + "abi": [] + }, + "0x0000000000000000000000000000000000000001": { + "address": "0x0000000000000000000000000000000000000001", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000002": { + "address": "0x0000000000000000000000000000000000000002", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000003": { + "address": "0x0000000000000000000000000000000000000003", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000004": { + "address": "0x0000000000000000000000000000000000000004", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000005": { + "address": "0x0000000000000000000000000000000000000005", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000006": { + "address": "0x0000000000000000000000000000000000000006", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000007": { + "address": "0x0000000000000000000000000000000000000007", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x0000000000000000000000000000000000000008": { + "address": "0x0000000000000000000000000000000000000008", + "balance": "1", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + }, + "0x1820a4b7618bde71dce8cdc73aab6c95905fad24": { + "address": "0x1820a4b7618bde71dce8cdc73aab6c95905fad24", + "balance": "0", + "nonce": 0, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "ff5cc4f5a57b94db7936e35586bb5f8a270dc9d14b264fe4efbe826de694c9a3", + "code": "608060405234801561001057600080fd5b50600436106100885760003560e01c8063a41e7d511161005b578063a41e7d51146101b7578063aabbb8ca146101ed578063b705676514610219578063f712f3e81461026357610088565b806329965a1d1461008d5780633d584063146100c55780635df8122f1461010757806365ba36c114610135575b600080fd5b6100c3600480360360608110156100a357600080fd5b506001600160a01b03813581169160208101359160409091013516610299565b005b6100eb600480360360208110156100db57600080fd5b50356001600160a01b0316610501565b604080516001600160a01b039092168252519081900360200190f35b6100c36004803603604081101561011d57600080fd5b506001600160a01b038135811691602001351661054b565b6101a56004803603602081101561014b57600080fd5b81019060208101813564010000000081111561016657600080fd5b82018360208201111561017857600080fd5b8035906020019184600183028401116401000000008311171561019a57600080fd5b509092509050610624565b60408051918252519081900360200190f35b6100c3600480360360408110156101cd57600080fd5b5080356001600160a01b031690602001356001600160e01b03191661065f565b6100eb6004803603604081101561020357600080fd5b506001600160a01b0381351690602001356106dc565b61024f6004803603604081101561022f57600080fd5b5080356001600160a01b031690602001356001600160e01b031916610753565b604080519115158252519081900360200190f35b61024f6004803603604081101561027957600080fd5b5080356001600160a01b031690602001356001600160e01b0319166107f5565b60006001600160a01b038416156102b057836102b2565b335b9050336102be82610501565b6001600160a01b03161461030b576040805162461bcd60e51b815260206004820152600f60248201526e2737ba103a34329036b0b730b3b2b960891b604482015290519081900360640190fd5b61031483610873565b15610366576040805162461bcd60e51b815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b6001600160a01b0382161580159061038757506001600160a01b0382163314155b1561049d57604051602001808073455243313832305f4143434550545f4d4147494360601b815250601401905060405160208183030381529060405280519060200120826001600160a01b031663249cb3fa85846040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d602081101561044957600080fd5b50511461049d576040805162461bcd60e51b815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b6001600160a01b0381811660008181526020818152604080832088845290915280822080546001600160a01b0319169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b6001600160a01b03818116600090815260016020526040812054909116610529575080610546565b506001600160a01b03808216600090815260016020526040902054165b919050565b3361055583610501565b6001600160a01b0316146105a2576040805162461bcd60e51b815260206004820152600f60248201526e2737ba103a34329036b0b730b3b2b960891b604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b0316146105c157806105c4565b60005b6001600160a01b0383811660008181526001602052604080822080546001600160a01b0319169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106698282610753565b610674576000610676565b815b6001600160a01b039283166000818152602081815260408083206001600160e01b03199690961680845295825280832080546001600160a01b0319169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b6000806001600160a01b038416156106f457836106f6565b335b905061070183610873565b15610727578261071182826107f5565b61071c57600061071e565b815b92505050610659565b6001600160a01b0390811660009081526020818152604080832086845290915290205416905092915050565b60008080610768856301ffc9a760e01b610880565b9092509050811580610778575080155b1561078857600092505050610659565b61079a856001600160e01b0319610880565b90925090508115806107ab57508015155b156107bb57600092505050610659565b6107c58585610880565b90925090506001821480156107da5750806001145b156107ea57600192505050610659565b506000949350505050565b6001600160a01b03821660009081526002602090815260408083206001600160e01b03198516845290915281205460ff1661083b576108348383610753565b9050610659565b506001600160a01b038083166000818152602081815260408083206001600160e01b0319871684529091529020549091161492915050565b6001600160e01b03161590565b6040516301ffc9a760e01b8082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea164736f6c6343000706000a" + }, + "0x1f2414d0af8741bc822dbc2f88069c2b2907a840": { + "address": "0x1f2414d0af8741bc822dbc2f88069c2b2907a840", + "balance": "0", + "nonce": 3, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "a73df79c90ba2496f3440188807022bed5c7e2e826b596d22bcb4e127378835a", + "code": "6080604052600436106100295760003560e01c80630900f010146100c8578063aaf10f4214610117575b600080610034610159565b6001600160a01b0316600036604051808383808284378083019250505092505050600060405180830381855a610068610405565b50505050509150503d806000811461009c576040513d603f01601f191681016040523d815291503d6000602084013e6100a1565b606091505b509150915081156100b457805160208201f35b8051602082016100c26104f2565b50505050005b5a6100d161055d565b80156100e5576000806100e26104f2565b50505b5061011560048036036020811015610105576000806101026104f2565b50505b50356001600160a01b03166101bf565b005b5a61012061055d565b8015610134576000806101316104f2565b50505b5061013d610159565b6040516001600160a01b03909116815260200160405180910390f35b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101856105b7565b9050600061019282610269565b90506001600160a01b0381166101b3576003602160991b01925050506101bc565b91506101bc9050565b90565b6101c7610270565b6001600160a01b03165a6101d9610603565b6001600160a01b0316146102275760405162461bcd60e51b815260040180806020018281038252603381526020018061069860339139604001915050604051809103906102246104f2565b50505b610230816102dd565b806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b805b919050565b6000806102af604051602401604051601f1981830301815260409190915263996d79a560e01b6020820180516001600160e01b0316909117905261031a565b905060208101815160208110156102ce576000806102cb6104f2565b50505b81019080805194505050505090565b60006102e8826103f9565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610314610649565b50505050565b6060600080600b602160991b01846040518082805190602001908083835b602083106103575780518252601f199092019160209182019101610338565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855a61038f610405565b50505050509150503d80600081146103c3576040513d603f01601f191681016040523d815291503d6000602084013e6103c8565b606091505b509092509050600182151514156103e257915061026b9050565b8051602082016103f06104f2565b50505050919050565b6001600160a01b031690565b63ffe73914598160e01b8152610438565b80808311156104225750815b92915050565b8080831015610422575090919050565b836004820152846024820152606060448201528660648201526084810160005b88811015610470578088015182820152602001610458565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596104c58d3d610428565b8c016104d18187610416565b5b828110156104e657600081526020016104d2565b50929c50505050505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561052a57808601518282016040015260200161050f565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156105b25760008282015260200161059b565b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061059b56fe454f41732063616e206f6e6c792075706772616465207468656972206f776e20454f4120696d706c656d656e746174696f6e2e" + }, + "0xd86d22c02e301be7c35e3ef20962f614caf32b76": { + "address": "0xd86d22c02e301be7c35e3ef20962f614caf32b76", + "balance": "0", + "nonce": 6, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "a73df79c90ba2496f3440188807022bed5c7e2e826b596d22bcb4e127378835a", + "code": "6080604052600436106100295760003560e01c80630900f010146100c8578063aaf10f4214610117575b600080610034610159565b6001600160a01b0316600036604051808383808284378083019250505092505050600060405180830381855a610068610405565b50505050509150503d806000811461009c576040513d603f01601f191681016040523d815291503d6000602084013e6100a1565b606091505b509150915081156100b457805160208201f35b8051602082016100c26104f2565b50505050005b5a6100d161055d565b80156100e5576000806100e26104f2565b50505b5061011560048036036020811015610105576000806101026104f2565b50505b50356001600160a01b03166101bf565b005b5a61012061055d565b8015610134576000806101316104f2565b50505b5061013d610159565b6040516001600160a01b03909116815260200160405180910390f35b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101856105b7565b9050600061019282610269565b90506001600160a01b0381166101b3576003602160991b01925050506101bc565b91506101bc9050565b90565b6101c7610270565b6001600160a01b03165a6101d9610603565b6001600160a01b0316146102275760405162461bcd60e51b815260040180806020018281038252603381526020018061069860339139604001915050604051809103906102246104f2565b50505b610230816102dd565b806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b805b919050565b6000806102af604051602401604051601f1981830301815260409190915263996d79a560e01b6020820180516001600160e01b0316909117905261031a565b905060208101815160208110156102ce576000806102cb6104f2565b50505b81019080805194505050505090565b60006102e8826103f9565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610314610649565b50505050565b6060600080600b602160991b01846040518082805190602001908083835b602083106103575780518252601f199092019160209182019101610338565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855a61038f610405565b50505050509150503d80600081146103c3576040513d603f01601f191681016040523d815291503d6000602084013e6103c8565b606091505b509092509050600182151514156103e257915061026b9050565b8051602082016103f06104f2565b50505050919050565b6001600160a01b031690565b63ffe73914598160e01b8152610438565b80808311156104225750815b92915050565b8080831015610422575090919050565b836004820152846024820152606060448201528660648201526084810160005b88811015610470578088015182820152602001610458565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596104c58d3d610428565b8c016104d18187610416565b5b828110156104e657600081526020016104d2565b50929c50505050505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561052a57808601518282016040015260200161050f565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b63a8c4c5ec598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156105b25760008282015260200161059b565b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051600082529350602061059b565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60008152602061059b56fe454f41732063616e206f6e6c792075706772616465207468656972206f776e20454f4120696d706c656d656e746174696f6e2e" + }, + "0xe469ff3c6b7002cd591427b44f0a5922d3ca0026": { + "address": "0xe469ff3c6b7002cd591427b44f0a5922d3ca0026", + "balance": "0", + "nonce": 1, + "root": "f73d0451920b4b989f86d983ddd1aa9e30e815ff1453fae5c6ac78e759157251", + "codeHash": "5e8e87b2733770d1ee5f60b67b48208924d3693bf4ddd62ae3d1b6a37635ed56", + "code": "6080604052600436106100385760003560e01c806312762d5e146100435780632fa8ad531461016257806347fc822f1461018257610039565b5b6100416101e5565b005b348015610058576000806100556106bf565b50505b5061013660048036036020811015610078576000806100756106bf565b50505b810190808035906020019064010000000081111561009e5760008061009b6106bf565b50505b8201836020820111156100b9576000806100b66106bf565b50505b803590602001918460018302840111640100000000831117156100e4576000806100e16106bf565b50505b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506103ea565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610177576000806101746106bf565b50505b5061018061043a565b005b348015610197576000806101946106bf565b50505b506101e3600480360360208110156101b7576000806101b46106bf565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610580565b005b600073ffffffffffffffffffffffffffffffffffffffff16600060405180807f70726f78794f776e657200000000000000000000000000000000000000000000815250600a019050908152602001604051809103902060009061024661072d565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156102d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061095360239139604001915050604051809103906102d66106bf565b50505b600080600060405180807f70726f7879546172676574000000000000000000000000000000000000000000815250600b019050908152602001604051809103902060009061032561072d565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600036604051808383808284378083019250505092505050600060405180830381855a610383610790565b50505050509150503d80600081146103b7576040519150601f19603f3d011682016040523d82523d6000602084013e6103bc565b606091505b50915091506001151582151514156103d657805160208201f35b8051602082016103e46106bf565b50505050565b6000818051602081018201805184825260208301602085012081835280955050505050506000915061041a61072d565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060405180807f70726f78794f776e657200000000000000000000000000000000000000000000815250600a019050908152602001604051809103902060009061048361072d565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a6104bf610890565b73ffffffffffffffffffffffffffffffffffffffff161415610575575a6104e4610890565b600060405180807f70726f78794f776e657200000000000000000000000000000000000000000000815250600a019050908152602001604051809103902060006101000a8161053161072d565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179061056d6108ed565b50505061057e565b61057d6101e5565b5b565b600060405180807f70726f78794f776e657200000000000000000000000000000000000000000000815250600a01905090815260200160405180910390206000906105c961072d565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a610605610890565b73ffffffffffffffffffffffffffffffffffffffff1614156106b35780600060405180807f70726f7879546172676574000000000000000000000000000000000000000000815250600b019050908152602001604051809103902060006101000a8161066f61072d565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906106ab6108ed565b5050506106bc565b6106bb6101e5565b5b50565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156106fa5780860151816040840101526020810190506106dc565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561078b57600081830152602081019050610771565b505050565b63ffe73914598160e01b81526107cf565b6000819050818311156107b2578290505b92915050565b6000819050818310156107c9578290505b92915050565b836004820152846024820152606060448201528660648201526084810160005b8881101561080a5780880151818301526020810190506107ef565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af1505961085f8d3d6107b8565b8c0161086b81876107a1565b5b82811015610883576000815260208101905061086c565b50839d5050505050505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156108e8576000818301526020810190506108ce565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b604081101561094d57600081830152602081019050610933565b50505056fe5461726765742061646472657373206d75737420626520696e697469616c697a65642e", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "4200000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000003": "1f2414d0af8741bc822dbc2f88069c2b2907a840", + "0x0000000000000000000000000000000000000000000000000000000000000004": "6b4eab8d55a4f701c3fe58bdb8b3e1f181ea7087", + "0x0000000000000000000000000000000000000000000000000000000000000005": "23", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0f", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0186a0", + "0x3260c767fcfbc5a878cdd765d557c2dc0ec469dd5a59ab1a2625587d230ef95f": "d86d22c02e301be7c35e3ef20962f614caf32b76", + "0x77c70ab2411972e3fdfbab35b6ae1519d867baa21725dd08c381964443dcc9aa": "f8882eb01e6657532c4963b3f7160024dff56637", + "0xad59d8b039d0a49adcf8b040c0a328357753589ae2102d254712da0d90d17319": "4200000000000000000000000000000000000006", + "0xad59d8b039d0a49adcf8b040c0a328357753589ae2102d254712da0d90d1731f": "6115c7a6" + } + }, + "0xf8882eb01e6657532c4963b3f7160024dff56637": { + "address": "0xf8882eb01e6657532c4963b3f7160024dff56637", + "balance": "0", + "nonce": 1, + "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "3f6c0db7b731596e29329a29b05e095e5ecc501f7c8c43978caa4a25d8ff1c3f", + "code": "6080604052348015610019576000806100166140d3565b50505b506004361061014b5760003560e01c80636854e22b116100c1578063997d73df11610085578063997d73df1461067b5780639a7b5f111461069f578063bd2d1cab1461075d578063c95f9d0e146107d4578063d1dd871a1461082b578063f2fde38b1461086c5761014b565b80636854e22b146104c857806368be42ca146104ec5780637286e5e51461056357806381e6bdac146105d05780638da5cb5b146106475761014b565b8063358fc07e11610113578063358fc07e146102fd5780633cb747bf1461031b578063435fd5711461034f578063485cc9551461036d57806349561dc4146103da578063650a767b146104515761014b565b80630f208beb1461015957806312f54c1a146101e857806316a8dda7146102355780631d00a7711461026957806334636648146102c0575b6000806101566140d3565b50505b6101c460048036036040811015610178576000806101756140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108b9565b60405180848152602001838152602001828152602001935050505060405180910390f35b61023360048036036020811015610207576000806102046140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610905565b005b61023d610a2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102be60048036036040811015610288576000806102856140d3565b50505b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a5a565b005b6102fb600480360360208110156102df576000806102dc6140d3565b50505b81019080803563ffffffff169060200190929190505050610da9565b005b610305610fd0565b6040518082815260200191505060405180910390f35b610323610fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610357611008565b6040518082815260200191505060405180910390f35b6103d86004803603604081101561038c576000806103896140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611015565b005b61044f600480360360608110156103f9576000806103f66140d3565b50505b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133a565b005b6104c6600480360360608110156104705760008061046d6140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061171a565b005b6104d0611bd2565b604051808263ffffffff16815260200191505060405180910390f35b6105616004803603606081101561050b576000806105086140d3565b50505b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bef565b005b6105ce600480360360408110156105825760008061057f6140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612029565b005b610645600480360360608110156105ef576000806105ec6140d3565b50505b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612457565b005b61064f61282f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068361285c565b604051808263ffffffff16815260200191505060405180910390f35b6106ea600480360360208110156106be576000806106bb6140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061287d565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b6107d26004803603606081101561077c576000806107796140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061293d565b005b610829600480360360408110156107f3576000806107f06140d3565b50505b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061304a565b005b61086a6004803603604081101561084a576000806108476140d3565b50505b8101908080359060200190929190803590602001909291905050506134b2565b005b6108b76004803603602081101561088b576000806108886140d3565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136c9565b005b600260205281600052604060002060205280600052604060002060009150915050806000016108e6614141565b90806001016108f3614141565b9080600201610900614141565b905083565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401610954614141565b81600301610960614141565b1015610a2957600061099182600301610977614141565b83600401610983614141565b61385890919063ffffffff16565b90506000826002016109a1614141565b14610a0a576109f86109de836002016109b8614141565b6109d064e8d4a51000856138e490919063ffffffff16565b61397390919063ffffffff16565b836005016109ea614141565b613a0590919063ffffffff16565b826005018190610a066141a4565b5050505b81600401610a16614141565b826003018190610a246141a4565b505050505b5050565b6004600090610a3a614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600090610ac4614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2041646472657373204e6f7420526567697374657265640000000081525060200191505060405180910390610b716140d3565b50505b610c045a610b80614209565b5a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b6040811015610bd957600081830152602081019050610bbf565b505050858573ffffffffffffffffffffffffffffffffffffffff16613a96909392919063ffffffff16565b600063cf26fb1b60e01b5a610c17614209565b8584600001600090610c27614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050610d286004600090610cfd614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2261285c565b83613b57565b7fe57500de6b6dcf76b201fef514aca6501809e3b700c9fbd5e803567c66edf54c5a610d52614209565b8585604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b6003600090610db6614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a610df2614209565b73ffffffffffffffffffffffffffffffffffffffff161480610e695750600073ffffffffffffffffffffffffffffffffffffffff166003600090610e34614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e657200000000000000000081525060200191505060405180910390610ee16140d3565b50505b600073ffffffffffffffffffffffffffffffffffffffff166004600090610f09614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806145556025913960400191505060405180910390610f996140d3565b50505b80600760006101000a81610fae614141565b8163ffffffff021916908363ffffffff16021790610fca6141a4565b50505050565b6006610fda614141565b81565b600080610fe8614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005611012614141565b81565b6003600090611022614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a61105e614209565b73ffffffffffffffffffffffffffffffffffffffff1614806110d55750600073ffffffffffffffffffffffffffffffffffffffff1660036000906110a0614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e65720000000000000000008152506020019150506040518091039061114d6140d3565b50505b600073ffffffffffffffffffffffffffffffffffffffff166004600090611175614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f436f6e747261637420686173206265656e20696e697469616c697a6564000000815250602001915050604051809103906112216140d3565b50505b816000806101000a81611235614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906112716141a4565b50505080600460006101000a81611286614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906112c26141a4565b5050505a6112ce614209565b600360006101000a816112df614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179061131b6141a4565b50505061132a6023600f6134b2565b611336620186a0610da9565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a6113c9614209565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168260010160009061142c614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2041646472657373204e6f74205265676973746572656400000000815250602001915050604051809103906114d96140d3565b50505b600061155861153e836001016114f0614141565b61153064e8d4a5100061152288600501611508614141565b88600001611514614141565b6138e490919063ffffffff16565b61397390919063ffffffff16565b61385890919063ffffffff16565b8360020161154a614141565b613a0590919063ffffffff16565b9050858110156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f576974686472617720526577617264204572726f720000000000000000000000815250602001915050604051809103906115d66140d3565b50505b6115ec868261385890919063ffffffff16565b8260020181906115fa6141a4565b50505061163d64e8d4a5100061162f85600501611615614141565b85600001611621614141565b6138e490919063ffffffff16565b61397390919063ffffffff16565b82600101819061164b6141a4565b50505061167984878773ffffffffffffffffffffffffffffffffffffffff16613c859092919063ffffffff16565b7f3cb7cb475a33eda02ee6e719b6c2fc0c899157cfc6f098daf545354dbbce41ec5a6116a3614209565b858888604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1505050505050565b600073ffffffffffffffffffffffffffffffffffffffff16600460009061173f614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061455560259139604001915050604051809103906117cf6140d3565b50505b60046000906117df614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16611804613d27565b73ffffffffffffffffffffffffffffffffffffffff165a611823614209565b73ffffffffffffffffffffffffffffffffffffffff1614611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614527602e9139604001915050604051809103906118956140d3565b50505b8073ffffffffffffffffffffffffffffffffffffffff166118b7613d27565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186806118f7614266565b15801561190c576000806119096140d3565b50505b505a6119166142c9565b5050505050158015611935573d6000803e3d60006119326140d3565b50505b505050506040513d6020811015611954576000806119516140d3565b50505b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146119da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061459b60309139604001915050604051809103906119d76140d3565b50505b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611a4f6103e8611a416005611a32614141565b886138e490919063ffffffff16565b61397390919063ffffffff16565b90506000611a836103e8611a756006611a66614141565b896138e490919063ffffffff16565b61397390919063ffffffff16565b90506000611a9a8284613a0590919063ffffffff16565b90506000611ab1828961385890919063ffffffff16565b9050611ad18486600401611ac3614141565b613a0590919063ffffffff16565b856004018190611adf6141a4565b505050611b008386600601611af2614141565b613a0590919063ffffffff16565b856006018190611b0e6141a4565b505050611b3c89828973ffffffffffffffffffffffffffffffffffffffff16613c859092919063ffffffff16565b7ff1068421680e00dfc2c4f3fc20c7f565bf1ec365420e7544365bae13d5cbc8c889828686868c604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a1505050505050505050565b6007600090611bdf614141565b906101000a900463ffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a611c7e614209565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1682600101600090611ce1614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2041646472657373204e6f7420526567697374657265640000000081525060200191505060405180910390611d8e6140d3565b50505b8481600001611d9e614141565b1015611e1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5769746864726177204572726f7200000000000000000000000000000000000081525060200191505060405180910390611e186140d3565b50505b611e2484610905565b611e9e611e8482600101611e36614141565b611e7664e8d4a51000611e6887600501611e4e614141565b87600001611e5a614141565b6138e490919063ffffffff16565b61397390919063ffffffff16565b61385890919063ffffffff16565b82600201611e90614141565b613a0590919063ffffffff16565b816002018190611eac6141a4565b505050611ecd8582600001611ebf614141565b61385890919063ffffffff16565b816000018190611edb6141a4565b505050611f1e64e8d4a51000611f1084600501611ef6614141565b84600001611f02614141565b6138e490919063ffffffff16565b61397390919063ffffffff16565b816001018190611f2c6141a4565b505050611f4d8583600201611f3f614141565b61385890919063ffffffff16565b826002018190611f5b6141a4565b505050611f8983868673ffffffffffffffffffffffffffffffffffffffff16613c859092919063ffffffff16565b7ffa2e8fcf14fd6ea11b6ebe7caf7de210198b8fe1eaf0e06d19f8d87c73860c465a611fb3614209565b848787604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050505050565b6003600090612036614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a612072614209565b73ffffffffffffffffffffffffffffffffffffffff1614806120e95750600073ffffffffffffffffffffffffffffffffffffffff1660036000906120b4614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000815250602001915050604051809103906121616140d3565b50505b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff16816001016000906121ce614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546f6b656e204164647265737320416c726561647920526567697374657264008152506020019150506040518091039061227a6140d3565b50505b6040518061010001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020015a6122ed6143c9565b815250600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81612347614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906123836141a4565b50505060208201518160010160006101000a8161239e614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906123da6141a4565b5050506040820151816002016123ee6141a4565b50506060820151816003016124016141a4565b50506080820151816004016124146141a4565b505060a0820151816005016124276141a4565b505060c08201518160060161243a6141a4565b505060e08201518160070161244d6141a4565b5050905050505050565b6003600090612464614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a6124a0614209565b73ffffffffffffffffffffffffffffffffffffffff1614806125175750600073ffffffffffffffffffffffffffffffffffffffff1660036000906124e2614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e65720000000000000000008152506020019150506040518091039061258f6140d3565b50505b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff16816001016000906125fc614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f546f6b656e2041646472657373204e6f74205265676973746572000000000000815250602001915050604051809103906126a96140d3565b50505b83816006016126b9614141565b1015612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f776e657220526577617264205769746864726177204572726f720000000000815250602001915050604051809103906127336140d3565b50505b6127548482600601612746614141565b61385890919063ffffffff16565b8160060181906127626141a4565b50505061279082858573ffffffffffffffffffffffffffffffffffffffff16613c859092919063ffffffff16565b7f3cb71b9a1fb601579f96812b9f86ab5e914fc3e54c98d5f84d95581b2b9884f35a6127ba614209565b838686604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a150505050565b600360009061283c614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009061286b614141565b906101000a900463ffffffff16905090565b6001602052806000526040600020600091509050806000016000906128a0614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001016000906128cd614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002016128f7614141565b9080600301612904614141565b9080600401612911614141565b908060050161291e614141565b908060060161292b614141565b9080600701612938614141565b905088565b600073ffffffffffffffffffffffffffffffffffffffff166004600090612962614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061455560259139604001915050604051809103906129f26140d3565b50505b6004600090612a02614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16612a27613d27565b73ffffffffffffffffffffffffffffffffffffffff165a612a46614209565b73ffffffffffffffffffffffffffffffffffffffff1614612abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614527602e913960400191505060405180910390612ab86140d3565b50505b8073ffffffffffffffffffffffffffffffffffffffff16612ada613d27565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b81526004016020604051808303818680612b1a614266565b158015612b2f57600080612b2c6140d3565b50505b505a612b396142c9565b5050505050158015612b58573d6000803e3d6000612b556140d3565b50505b505050506040513d6020811015612b7757600080612b746140d3565b50505b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612bfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061459b6030913960400191505060405180910390612bfa6140d3565b50505b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612c726103e8612c646005612c55614141565b886138e490919063ffffffff16565b61397390919063ffffffff16565b90506000612ca66103e8612c986006612c89614141565b896138e490919063ffffffff16565b61397390919063ffffffff16565b90506000612cbd8284613a0590919063ffffffff16565b90506000612cd4828961385890919063ffffffff16565b90508673ffffffffffffffffffffffffffffffffffffffff166370a082315a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b6040811015612d4b57600081830152602081019050612d31565b5050506040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303818680612d93614266565b158015612da857600080612da56140d3565b50505b505a612db26142c9565b5050505050158015612dd1573d6000803e3d6000612dce6140d3565b50505b505050506040513d6020811015612df057600080612ded6140d3565b50505b8101908080519060200190929190505050811115612f2a5760006353174cc160e01b8a8a88600001600090612e23614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050612f246004600090612ef9614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f1e61285c565b83613b57565b5061303f565b612f488486600401612f3a614141565b613a0590919063ffffffff16565b856004018190612f566141a4565b505050612f778386600601612f69614141565b613a0590919063ffffffff16565b856006018190612f856141a4565b505050612fb389828973ffffffffffffffffffffffffffffffffffffffff16613c859092919063ffffffff16565b7fedb4d3b4b55168608412f15db11c00859915842963c31b1f08d910a38e1d6aa489828686868c604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a15b505050505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a6130d9614209565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168260010160009061313c614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2041646472657373204e6f74205265676973746572656400000000815250602001915050604051809103906131e96140d3565b50505b6131f583610905565b600081600001613203614141565b11156132fc576132836132698260010161321b614141565b61325b64e8d4a5100061324d87600501613233614141565b8760000161323f614141565b6138e490919063ffffffff16565b61397390919063ffffffff16565b61385890919063ffffffff16565b82600201613275614141565b613a0590919063ffffffff16565b8160020181906132916141a4565b5050506132e664e8d4a510006132d8846005016132ac614141565b6132ca88866000016132bc614141565b613a0590919063ffffffff16565b6138e490919063ffffffff16565b61397390919063ffffffff16565b8160010181906132f46141a4565b505050613343565b61333164e8d4a5100061332384600501613314614141565b876138e490919063ffffffff16565b61397390919063ffffffff16565b81600101819061333f6141a4565b5050505b6133d35a61334f614209565b5a63996d79a5598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051925060005b60408110156133a85760008183015260208101905061338e565b505050868673ffffffffffffffffffffffffffffffffffffffff16613a96909392919063ffffffff16565b6133f184826000016133e3614141565b613a0590919063ffffffff16565b8160000181906133ff6141a4565b5050506134208483600201613412614141565b613a0590919063ffffffff16565b82600201819061342e6141a4565b5050507f5852d1d46e583f7e92c2a572221de0e681d82ef71f489847e056b9445c0147365a61345b614209565b8585604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b60036000906134bf614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a6134fb614209565b73ffffffffffffffffffffffffffffffffffffffff1614806135725750600073ffffffffffffffffffffffffffffffffffffffff16600360009061353d614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000815250602001915050604051809103906135ea6140d3565b50505b600073ffffffffffffffffffffffffffffffffffffffff166004600090613612614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156136a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061455560259139604001915050604051809103906136a26140d3565b50505b81600581906136b26141a4565b50505080600681906136c26141a4565b5050505050565b60036000906136d6614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165a613712614209565b73ffffffffffffffffffffffffffffffffffffffff1614806137895750600073ffffffffffffffffffffffffffffffffffffffff166003600090613754614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000815250602001915050604051809103906138016140d3565b50505b80600360006101000a81613816614141565b8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217906138526141a4565b50505050565b6000828211156138d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250602001915050604051809103906138d66140d3565b50505b818303905092915050565b6000808314156138f7576000905061396d565b600082840290508284828161390857fe5b0414613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061457a60219139604001915050604051809103906139656140d3565b50505b809150505b92915050565b60008082116139f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250602001915050604051809103906139f06140d3565b50505b8183816139fc57fe5b04905092915050565b600080828401905083811015613a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390613a896140d3565b50505b8091505092915050565b613b51846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d57565b50505050565b613b5f613d27565b73ffffffffffffffffffffffffffffffffffffffff16633dbb202b8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff168152602001806020018363ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015613bf4578082015181840152602081019050613bd9565b50505050905090810190601f168015613c215780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008780613c3d614266565b158015613c5257600080613c4f6140d3565b50505b505a613c5c614426565b505050505050158015613c7c573d6000803e3d6000613c796140d3565b50505b50505050505050565b613d228363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d57565b505050565b600080600090613d35614141565b906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613db9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613e589092919063ffffffff16565b9050600081511115613e5357808060200190516020811015613de357600080613de06140d3565b50505b8101908080519060200190929190505050613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145cb602a913960400191505060405180910390613e4f6140d3565b50505b5b505050565b6060613e678484600085613e70565b90509392505050565b6060613e7b85613fd5565b613ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390613ef36140d3565b50505b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613f455780518252602082019150602081019050602083039250613f22565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875a613f7e614426565b505050505050925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b5091509150613fc9828286613fef565b92505050949350505050565b60008082613fe1614266565b905060008111915050919050565b60608315613fff578290506140cc565b60008351111561402057825180846020016140186140d3565b5050506140cb565b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561408757808201518184015260208101905061406c565b50505050905090810190601f1680156140b45780820380516001836020036101000a031916815260200191505b5092505050604051809103906140c86140d3565b50505b5b9392505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561410e5780860151816040840101526020810190506140f0565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561419f57600081830152602081019050614185565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015614204576000818301526020810190506141ea565b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561426157600081830152602081019050614247565b505050565b638435035b598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156142c4576000818301526020810190506142aa565b505050565b638540661f598160e01b8152614308565b6000819050818311156142eb578290505b92915050565b600081905081831015614302578290505b92915050565b836004820152846024820152606060448201528660648201526084810160005b88811015614343578088015181830152602081019050614328565b506060828960a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8b8b82606087013350600060045af150596143988d3d6142f1565b8c016143a481876142da565b5b828110156143bc57600081526020810190506143a5565b50839d5050505050505050565b63bdbf8c36598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101561442157600081830152602081019050614407565b505050565b6385979f76598160e01b8152614465565b600081905081831115614448578290505b92915050565b60008190508183101561445f578290505b92915050565b836004820152846024820152606060448201528760648201526084810160005b898110156144a0578089015181830152602081019050614485565b506060828a60a40184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b815160408301513d6000853e8c8c82606087013350600060045af150596144f58e3d61444e565b8d016145018187614437565b5b828110156145195760008152602081019050614502565b50839e505050505050505056fe4f564d5f58434841494e3a206d657373656e67657220636f6e747261637420756e61757468656e74696361746564436f6e747261637420686173206e6f7420796574206265656e20696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f73732d646f6d61696e206d6573736167655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564" + } + } +} diff --git a/boba_community/hc-captcha-faucet/README.md b/boba_community/hc-captcha-faucet/README.md index 731407aad0..668565ba29 100644 --- a/boba_community/hc-captcha-faucet/README.md +++ b/boba_community/hc-captcha-faucet/README.md @@ -18,7 +18,7 @@ The token-claiming process takes place in five steps: ### 1. User obtains the CAPTCHA image and the image UUID -The API GET request is sent to `https://api-turing.boba.network/get.catcha` on the frontend. The returned payload is +The API GET request is sent to `https://api-turing.boba.network/get.catcha` on the frontend. The returned payload is ```js { @@ -63,7 +63,7 @@ The POST request with the hashed answer is sent to `https://api-turing.boba.netw keyInRedis = db.get(uuid) # Return the payload return returnPayload(keyInRedis.decode('utf-8') == key) - + # Payload is built based on the result def returnPayload(result): # We return 0 or 1 using uint256 @@ -74,12 +74,12 @@ The POST request with the hashed answer is sent to `https://api-turing.boba.netw else: # Add UINT256 0 if the result is wrong payload += '{0:0{1}x}'.format(int(0), 64) - + returnPayload = { 'statusCode': 200, 'body': json.dumps({ 'result': payload }) } - + return returnPayload ``` @@ -88,7 +88,7 @@ The POST request with the hashed answer is sent to `https://api-turing.boba.netw On the contract level, we decode the result from the Turing request and release the funds if the answer is correct. ```javascript - + // Decode the response from outside API bytes memory encResponse = turing.TuringTx(turingUrl, encRequest); @@ -179,9 +179,9 @@ Create a `.env` file in the root directory of the contracts folder. Add environm ```bash -NETWORK=rinkeby -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/9844f35ff4a84003a7025a65a9412002 -L2_NODE_WEB3_URL=https://rinkeby.boba.network +NETWORK=goerli +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 DEPLOYER_PRIVATE_KEY= @@ -206,7 +206,7 @@ contract BobaFaucet is Ownable { address public turingHelperAddress; string public turingUrl; TuringHelper public turing; - + constructor( address _turingHelperAddress, string memory _turingUrl @@ -215,13 +215,13 @@ contract BobaFaucet is Ownable { turing = TuringHelper(_turingHelperAddress); turingUrl = _turingUrl; } - + function getBobaFaucet( bytes32 _uuid, string memory _key ) external { require(BobaClaimRecords[msg.sender] + waitingPeriod < block.timestamp, 'Invalid request'); - + // The key is hashed bytes32 hashedKey = keccak256(abi.encodePacked(_key)); uint256 result = _verifyKey(_uuid, hashedKey); @@ -232,7 +232,7 @@ contract BobaFaucet is Ownable { emit GetBobaFaucet(_uuid, hashedKey, msg.sender, BobaFaucetAmount, block.timestamp); } - + // Call Turing contract to get the result from the outside API endpoint function _verifyKey(bytes32 _uuid, bytes32 _key) private returns (uint256) { bytes memory encRequest = abi.encodePacked(_uuid, _key); diff --git a/boba_community/hc-captcha-faucet/packages/contracts/package.json b/boba_community/hc-captcha-faucet/packages/contracts/package.json index 3dec697082..490060514e 100644 --- a/boba_community/hc-captcha-faucet/packages/contracts/package.json +++ b/boba_community/hc-captcha-faucet/packages/contracts/package.json @@ -27,7 +27,7 @@ "@nomiclabs/hardhat-etherscan": "^2.1.8", "@nomiclabs/hardhat-waffle": "^2.0.1", "@openzeppelin/contracts": "4.4.2", - "@openzeppelin/contracts-upgradeable": "4.3.2", + "@openzeppelin/contracts-upgradeable": "4.8.3", "chalk": "^4.1.1", "dotenv": "^8.2.0", "glob": "^7.1.6", diff --git a/boba_community/hc-captcha-faucet/packages/gate/package.json b/boba_community/hc-captcha-faucet/packages/gate/package.json index b5ad0df4c0..6a3db9e3cf 100644 --- a/boba_community/hc-captcha-faucet/packages/gate/package.json +++ b/boba_community/hc-captcha-faucet/packages/gate/package.json @@ -10,7 +10,7 @@ "serve": "npm run buildenv-prod && serve -s build -l 3000 -c public/serve.json", "start": "npm run buildenv-dev && react-scripts start", "audit-check": "audit-ci --moderate", - "deploy:rinkeby": "GENERATE_SOURCEMAP=false REACT_APP_ENV=prod REACT_APP_CHAIN=rinkeby react-scripts build && aws s3 rm s3://faucets.boba.network --recursive && aws s3 sync build s3://faucets.boba.network && aws s3 cp s3://faucets.boba.network/index.html s3://faucets.boba.network/index.html --metadata-directive REPLACE --cache-control max-age=0 --content-type text/html" + "deploy:goerli": "GENERATE_SOURCEMAP=false REACT_APP_ENV=prod REACT_APP_CHAIN=goerli react-scripts build && aws s3 rm s3://faucets.boba.network --recursive && aws s3 sync build s3://faucets.boba.network && aws s3 cp s3://faucets.boba.network/index.html s3://faucets.boba.network/index.html --metadata-directive REPLACE --cache-control max-age=0 --content-type text/html" }, "dependencies": { "@emotion/react": "^11.4.0", diff --git a/boba_community/hc-captcha-faucet/yarn.lock b/boba_community/hc-captcha-faucet/yarn.lock index b18cf8064e..a93abf1a14 100644 --- a/boba_community/hc-captcha-faucet/yarn.lock +++ b/boba_community/hc-captcha-faucet/yarn.lock @@ -1337,6 +1337,13 @@ ts-node "^8.0.2" url-join "^4.0.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/normalize.css@*": version "12.0.0" resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" @@ -1802,6 +1809,19 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/web" "^5.6.0" +"@ethersproject/abstract-provider@^5.5.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + "@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" @@ -1824,6 +1844,17 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.0" +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" @@ -1831,6 +1862,13 @@ dependencies: "@ethersproject/bytes" "^5.6.0" +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" @@ -1848,6 +1886,15 @@ "@ethersproject/logger" "^5.6.0" bn.js "^4.11.9" +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + "@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.6.0": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" @@ -1855,6 +1902,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/constants@5.6.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" @@ -1862,6 +1916,13 @@ dependencies: "@ethersproject/bignumber" "^5.6.0" +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts@5.6.0", "@ethersproject/contracts@^5.4.1": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067" @@ -1949,11 +2010,24 @@ "@ethersproject/bytes" "^5.6.0" js-sha3 "0.8.0" +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + "@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + "@ethersproject/networks@5.6.1", "@ethersproject/networks@^5.6.0": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" @@ -1961,6 +2035,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" @@ -1976,6 +2057,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/providers@5.6.2", "@ethersproject/providers@^5.0.24", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.5", "@ethersproject/providers@^5.5.3": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.2.tgz#b9807b1c8c6f59fa2ee4b3cf6519724d07a9f422" @@ -2017,6 +2105,14 @@ "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" @@ -2038,6 +2134,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.6.0", "@ethersproject/solidity@^5.4.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" @@ -2059,6 +2167,15 @@ "@ethersproject/constants" "^5.6.0" "@ethersproject/logger" "^5.6.0" +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.5.0", "@ethersproject/transactions@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" @@ -2074,6 +2191,21 @@ "@ethersproject/rlp" "^5.6.0" "@ethersproject/signing-key" "^5.6.0" +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/units@5.6.0", "@ethersproject/units@^5.0.11": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c" @@ -2115,6 +2247,17 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" @@ -2365,6 +2508,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" @@ -3598,10 +3749,10 @@ dependencies: "@octokit/openapi-types" "^11.2.0" -"@openzeppelin/contracts-upgradeable@4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.3.2.tgz#92df481362e366c388fc02133cf793029c744cea" - integrity sha512-i/pOaOtcqDk4UqsrOv735uYyTbn6dvfiuVu5hstsgV6c4ZKUtu88/31zT2BzkCg+3JfcwOfgg2TtRKVKKZIGkQ== +"@openzeppelin/contracts-upgradeable@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz#6b076a7b751811b90fe3a172a7faeaa603e13a3f" + integrity sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg== "@openzeppelin/contracts@4.4.2": version "4.4.2" @@ -4047,6 +4198,26 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@typechain/ethers-v5@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz#cd3ca1590240d587ca301f4c029b67bfccd08810" @@ -4972,6 +5143,11 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" @@ -6391,6 +6567,11 @@ bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.19.2: version "1.19.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" @@ -9642,7 +9823,7 @@ ethers@^4.0.32: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.32, ethers@^5.4.5, ethers@^5.5.2, ethers@^5.5.4, ethers@^5.6.0: +ethers@^5.0.1, ethers@^5.0.2, ethers@^5.4.5, ethers@^5.5.2, ethers@^5.5.4, ethers@^5.6.0: version "5.6.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.2.tgz#e75bac7f038c5e0fdde667dba62fc223924143a2" integrity sha512-EzGCbns24/Yluu7+ToWnMca3SXJ1Jk1BvWB7CCmVNxyOeM4LLvw2OLuIHhlkhQk1dtOcj9UMsdkxUh8RiG1dxQ== @@ -19463,24 +19644,31 @@ ts-generator@^0.1.1: resolve "^1.8.1" ts-essentials "^1.0.0" -ts-node@^8.0.2: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" - integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" + create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.17" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" -ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== +ts-node@^8.0.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== dependencies: arg "^4.1.0" - create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" source-map-support "^0.5.17" @@ -19659,7 +19847,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.2.4, typescript@^4.3.5: +typescript@^4.3.5: version "4.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== @@ -20000,6 +20188,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" diff --git a/boba_community/hc-kyc/hardhat.config.ts b/boba_community/hc-kyc/hardhat.config.ts index bf09528c19..43c5c4342e 100644 --- a/boba_community/hc-kyc/hardhat.config.ts +++ b/boba_community/hc-kyc/hardhat.config.ts @@ -12,9 +12,9 @@ const config: HardhatUserConfig = { boba_local: { url: 'http://localhost:8545', }, - boba_rinkeby: { - url: 'https://rinkeby.boba.network', - bridgeCounterpartUrl: 'https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', // public RPC + boba_goerli: { + url: 'https://goerli.boba.network', + bridgeCounterpartUrl: 'https://goerli.gateway.tenderly.co', // public RPC accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], } as any, boba_mainnet: { diff --git a/boba_community/hc-kyc/package.json b/boba_community/hc-kyc/package.json index 930bf90dd8..e4c7ea1586 100644 --- a/boba_community/hc-kyc/package.json +++ b/boba_community/hc-kyc/package.json @@ -14,7 +14,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_community/hc-monsters/hardhat.config.ts b/boba_community/hc-monsters/hardhat.config.ts index f4ab5f460a..737082626e 100644 --- a/boba_community/hc-monsters/hardhat.config.ts +++ b/boba_community/hc-monsters/hardhat.config.ts @@ -14,7 +14,7 @@ const config: HardhatUserConfig = { }, boba_goerli: { url: 'https://goerli.boba.network', - bridgeCounterpartUrl: 'https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', // public RPC + bridgeCounterpartUrl: 'https://goerli.gateway.tenderly.co', // public RPC accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], } as any, boba_mainnet: { diff --git a/boba_community/hc-monsters/package.json b/boba_community/hc-monsters/package.json index 8b6850ab86..614883adb5 100644 --- a/boba_community/hc-monsters/package.json +++ b/boba_community/hc-monsters/package.json @@ -13,7 +13,7 @@ "deploy": "hardhat run scripts/deploy.ts", "flatten": "npx hardhat flatten ./contracts/NFTMonsterV2.sol >> contracts/NFTMonsterV2Flat.sol", "test:local": "npx hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_community/hc-start/packages/dapp-contracts/hardhat.config.ts b/boba_community/hc-start/packages/dapp-contracts/hardhat.config.ts index d24586d593..00b04d9f44 100644 --- a/boba_community/hc-start/packages/dapp-contracts/hardhat.config.ts +++ b/boba_community/hc-start/packages/dapp-contracts/hardhat.config.ts @@ -21,17 +21,9 @@ const config: HardhatUserConfig = { url: 'https://goerli.boba.network', accounts: [process.env.PRIVATE_KEY, process.env.PRIVATE_KEY_2], }, - boba_rinkeby: { - url: 'https://rinkeby.boba.network', - accounts: [process.env.PRIVATE_KEY, process.env.PRIVATE_KEY_2], - }, boba_mainnet: { url: 'https://mainnet.boba.network', }, - rinkeby: { - url: 'https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', - accounts: [process.env.PRIVATE_KEY, process.env.PRIVATE_KEY_2], - }, }, solidity: { compilers: [ diff --git a/boba_examples/README.md b/boba_examples/README.md index 1f70a6a66c..20442d33bb 100644 --- a/boba_examples/README.md +++ b/boba_examples/README.md @@ -189,13 +189,13 @@ $ cd packages/boba/turing $ yarn test:local ``` -**Note: Testing on Rinkeby** +**Note: Testing on Goerli** -To test on Rinkeby, you need a private key with both ETH and BOBA on the Boba L2; the private key needs to be provided in `hardhat.config.js`. Just replace all the zeros with your key: +To test on Goerli, you need a private key with both ETH and BOBA on the Boba L2; the private key needs to be provided in `hardhat.config.js`. Just replace all the zeros with your key: ```javascript - boba_rinkeby: { - url: 'https://rinkeby.boba.network', + boba_goerli: { + url: 'https://goerli.boba.network', accounts: ['0x0000000000000000000000000000000000000000000000000000000000000000'] }, ``` @@ -204,7 +204,7 @@ Then, run: ```bash $ cd packages/boba/turing -$ yarn test:rinkeby +$ yarn test:goerli ``` The tests will perform some basic floating point math, provide some random numbers, and get the latest BTC-USD exchange rate: diff --git a/boba_examples/boba-fee/.env.example b/boba_examples/boba-fee/.env.example index 64ba082ca9..d0cfbcdb0f 100644 --- a/boba_examples/boba-fee/.env.example +++ b/boba_examples/boba-fee/.env.example @@ -4,14 +4,14 @@ L1_NODE_WEB3_URL=http://localhost:9545 L2_NODE_WEB3_URL=http://localhost:8545 PRIV_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -# Rinkeby +# Goerli ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://rinkeby.boba.network +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network PRIV_KEY= # Mainnet ADDRESS_MANAGER_ADDRESS=0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089 -L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://mainnet.boba.network +L1_NODE_WEB3_URL=mainnet.gateway.tenderly.co +L2_NODE_WEB3_URL=http://gateway.tenderly.co/public/boba-ethereum PRIV_KEY= diff --git a/boba_examples/boba-fee/README.md b/boba_examples/boba-fee/README.md index cfcd112157..67550c9da6 100644 --- a/boba_examples/boba-fee/README.md +++ b/boba_examples/boba-fee/README.md @@ -26,7 +26,7 @@ Boba Network accepts BOBA and ETH as fee tokens. The fee choice is recorded in t await Boba_GasPriceOracle.useBobaAsFeeToken() ``` - To avoid any accident, we *only* allow EOA accounts to use BOBA as the fee token. + To avoid any accident, we *only* allow EOA accounts to use BOBA as the fee token. * The default fee token option is ETH. You can swith the fee token from BOBA to ETH calling the `Boba_GasPriceOracle` contract. Before switching to ETH, you have to have at least **0.002 ETH** in your wallet. Otherwise, you will get stuck due to lack of ETH. We provide a *meta transaction* option for you to swap BOBA for a small amount of ETH. You can see this is option in the offical [gateway](https://gateway.boba.network). @@ -60,17 +60,17 @@ Boba Network accepts BOBA and ETH as fee tokens. The fee choice is recorded in t Then, add `.env` in `boba/boba_examples/boba-fee`. ```yaml - # Rinkeby + # Goerli ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 - L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/KEY - L2_NODE_WEB3_URL=https://rinkeby.boba.network + L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co + L2_NODE_WEB3_URL=https://goerli.boba.network PRIV_KEY= - - + + # Mainnet ADDRESS_MANAGER_ADDRESS=0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089 - L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/KEY - L2_NODE_WEB3_URL=https://mainnet.boba.network + L1_NODE_WEB3_URL=https://mainnet.gateway.tenderly.co + L2_NODE_WEB3_URL=http://gateway.tenderly.co/public/boba-ethereum PRIV_KEY= ``` @@ -78,8 +78,8 @@ Boba Network accepts BOBA and ETH as fee tokens. The fee choice is recorded in t ```bash # Use BOBA as the fee token - $ yarn use:boba - + $ yarn use:boba + # Use ETH as the fee token $ yarn use:eth ``` diff --git a/boba_examples/boba-straw/.env.example b/boba_examples/boba-straw/.env.example index e1b01765aa..f29beef221 100644 --- a/boba_examples/boba-straw/.env.example +++ b/boba_examples/boba-straw/.env.example @@ -1,11 +1,11 @@ -# Rinkeby +# Goerli ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://rinkeby.boba.network +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network PRIV_KEY= # Mainnet ADDRESS_MANAGER_ADDRESS=0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089 -L1_NODE_WEB3_URL=https://mainnet.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://mainnet.boba.network +L1_NODE_WEB3_URL=mainnet.gateway.tenderly.co +L2_NODE_WEB3_URL=http://gateway.tenderly.co/public/boba-ethereum PRIV_KEY= diff --git a/boba_examples/boba-straw/README.md b/boba_examples/boba-straw/README.md index 38e3bfcc53..3cfe5194e4 100644 --- a/boba_examples/boba-straw/README.md +++ b/boba_examples/boba-straw/README.md @@ -22,10 +22,10 @@ yarn build Add .env in `/boba-examples/boba-straw` ```bash -# Rinkeby +# Goerli ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/KEY -L2_NODE_WEB3_URL=https://rinkeby.boba.network +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network PRIV_KEY= ``` diff --git a/boba_examples/hardhat-simple-storage/.env.example b/boba_examples/hardhat-simple-storage/.env.example index e9c4857ed2..d734488396 100644 --- a/boba_examples/hardhat-simple-storage/.env.example +++ b/boba_examples/hardhat-simple-storage/.env.example @@ -1,2 +1 @@ PK1=0x0000000000000000000000000000000000000000000000000000000000000000 -INFURA=YOUR_INFURA_KEY_HERE \ No newline at end of file diff --git a/boba_examples/hardhat-simple-storage/package.json b/boba_examples/hardhat-simple-storage/package.json index 740e4de5a0..a2383a8df8 100644 --- a/boba_examples/hardhat-simple-storage/package.json +++ b/boba_examples/hardhat-simple-storage/package.json @@ -7,8 +7,8 @@ "test/**/*.ts" ], "scripts": { - "deploy": "hardhat deploy --network boba_rinkeby", - "test": "hardhat test --network boba_rinkeby" + "deploy": "hardhat deploy --network boba_goerli", + "test": "hardhat test --network boba_goerli" }, "devDependencies": { "@ethersproject/providers": "^5.0.24", diff --git a/boba_examples/init-fund-l2/README.md b/boba_examples/init-fund-l2/README.md index a4d9945a99..4617809a40 100644 --- a/boba_examples/init-fund-l2/README.md +++ b/boba_examples/init-fund-l2/README.md @@ -5,11 +5,11 @@ We've created a simple example for you that moves ETH to the L2 - see `./boba-ex ### Update .env -First, add a `.env` to `/boba-examples/init-fund-l2`. You will need to provide your private key. +First, add a `.env` to `/boba-examples/init-fund-l2`. You will need to provide your private key. ```bash -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/INFURA_KEY -L2_NODE_WEB3_URL=https://rinkeby.boba.network +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 PRIVATE_KEY= ``` @@ -27,4 +27,4 @@ Finally, run: ```bash yarn install yarn start -``` \ No newline at end of file +``` diff --git a/boba_examples/nft_bridging/.env.example b/boba_examples/nft_bridging/.env.example index 571dedc3f8..d30511cde0 100644 --- a/boba_examples/nft_bridging/.env.example +++ b/boba_examples/nft_bridging/.env.example @@ -6,8 +6,8 @@ PRIV_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -# rinkeby +# goerli ADDRESS_MANAGER_ADDRESS=0x93A96D6A5beb1F661cf052722A1424CDDA3e9418 -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/... -L2_NODE_WEB3_URL=https://rinkeby.boba.network -PRIV_KEY=0x... \ No newline at end of file +L1_NODE_WEB3_URL=https://goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network +PRIV_KEY=0x... diff --git a/boba_examples/nft_bridging/package.json b/boba_examples/nft_bridging/package.json index 567d570897..5b4f4d7557 100644 --- a/boba_examples/nft_bridging/package.json +++ b/boba_examples/nft_bridging/package.json @@ -5,7 +5,7 @@ "scripts": { "compile": "hardhat compile", "start": "node src/index.js", - "start:rinkeby": "node src/quickStart-rinkeby.js" + "start:goerli": "node src/quickStart-goerli.js" }, "license": "MIT", "dependencies": { diff --git a/boba_examples/nft_bridging/quickStart-Rinkeby/SampleERC721.json b/boba_examples/nft_bridging/quickStart-Goerli/SampleERC721.json similarity index 100% rename from boba_examples/nft_bridging/quickStart-Rinkeby/SampleERC721.json rename to boba_examples/nft_bridging/quickStart-Goerli/SampleERC721.json diff --git a/boba_examples/nft_bridging/src/quickStart-rinkeby.js b/boba_examples/nft_bridging/src/quickStart-goerli.js similarity index 98% rename from boba_examples/nft_bridging/src/quickStart-rinkeby.js rename to boba_examples/nft_bridging/src/quickStart-goerli.js index e27108f1b6..883239abd6 100644 --- a/boba_examples/nft_bridging/src/quickStart-rinkeby.js +++ b/boba_examples/nft_bridging/src/quickStart-goerli.js @@ -4,7 +4,7 @@ const { Watcher } = require('../../../packages/core-utils/dist/watcher') const chalk = require('chalk') require('dotenv').config() -const SampleERC721Json = require('../quickStart-Rinkeby/SampleERC721.json') +const SampleERC721Json = require('../quickStart-Goerli/SampleERC721.json') const L1StandardERC721Json = require('@boba/contracts/artifacts/contracts/standards/L1StandardERC721.sol/L1StandardERC721.json') const L1NFTBridgeJson = require('@boba/contracts/artifacts/contracts/ERC721Bridges/L1NFTBridge.sol/L1NFTBridge.json') const L2NFTBridgeJson = require('@boba/contracts/artifacts/contracts/ERC721Bridges/L2NFTBridge.sol/L2NFTBridge.json') diff --git a/boba_examples/truffle-erc20/package.json b/boba_examples/truffle-erc20/package.json index 1adbdfe20f..4c782025ea 100644 --- a/boba_examples/truffle-erc20/package.json +++ b/boba_examples/truffle-erc20/package.json @@ -1,7 +1,7 @@ { "name": "@boba/Truffle-ERC20-Example", "version": "1.0.0", - "description": "Example of using Truffle to deploy an ERC20 to Boba Rinkeby", + "description": "Example of using Truffle to deploy an ERC20", "homepage": "https://github.com/bobanetwork/boba/develop/boba_examples/truffle-erc20#readme", "license": "MIT", "author": "OMG", @@ -12,8 +12,8 @@ "scripts": { "clean": "rimraf build", "compile": "truffle compile --config truffle-config.js", - "test:integration": "truffle test ./test/erc20.spec.js --network boba_rinkeby --config truffle-config.js", - "deploy": "truffle migrate --network boba_rinkeby --config truffle-config" + "test:integration": "truffle test ./test/erc20.spec.js --network boba_goerli --config truffle-config.js", + "deploy": "truffle migrate --network boba_goerli --config truffle-config" }, "keywords": [ "optimism", diff --git a/boba_examples/turing-complex-types/.env.example b/boba_examples/turing-complex-types/.env.example index 861d3b1a3d..1125e5ec4d 100644 --- a/boba_examples/turing-complex-types/.env.example +++ b/boba_examples/turing-complex-types/.env.example @@ -1,3 +1,3 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ +GOERLI_URL=https://goerli.gateway.tenderly.co PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/boba_examples/turing-complex-types/README.md b/boba_examples/turing-complex-types/README.md index 3bf122dc41..2a06aa143f 100644 --- a/boba_examples/turing-complex-types/README.md +++ b/boba_examples/turing-complex-types/README.md @@ -27,18 +27,18 @@ npx solhint 'contracts/**/*.sol' --fix # Etherscan verification -To try out Etherscan verification, you first need to deploy a contract to an Ethereum network that's supported by Etherscan, such as Ropsten. +To try out Etherscan verification, you first need to deploy a contract to an Ethereum network that's supported by Etherscan, such as Goerli. -In this project, copy the .env.example file to a file named .env, and then edit it to fill in the details. Enter your Etherscan API key, your Ropsten node URL (eg from Alchemy), and the private key of the account which will send the deployment transaction. With a valid .env file in place, first deploy your contract: +In this project, copy the .env.example file to a file named .env, and then edit it to fill in the details. Enter your Etherscan API key, your testnet node URL (eg from Alchemy), and the private key of the account which will send the deployment transaction. With a valid .env file in place, first deploy your contract: ```shell -hardhat run --network ropsten scripts/deploy.ts +hardhat run --network goerli scripts/deploy.ts ``` Then, copy the deployment address and paste it in to replace `DEPLOYED_CONTRACT_ADDRESS` in this command: ```shell -npx hardhat verify --network ropsten DEPLOYED_CONTRACT_ADDRESS "Hello, Hardhat!" +npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS "Hello, Hardhat!" ``` # Performance optimizations diff --git a/boba_examples/turing-complex-types/package.json b/boba_examples/turing-complex-types/package.json index fa4ffcb545..69d50f263f 100644 --- a/boba_examples/turing-complex-types/package.json +++ b/boba_examples/turing-complex-types/package.json @@ -9,7 +9,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_examples/turing-hello-world/.env.example b/boba_examples/turing-hello-world/.env.example index 861d3b1a3d..1125e5ec4d 100644 --- a/boba_examples/turing-hello-world/.env.example +++ b/boba_examples/turing-hello-world/.env.example @@ -1,3 +1,3 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ +GOERLI_URL=https://goerli.gateway.tenderly.co PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/boba_examples/turing-hello-world/package.json b/boba_examples/turing-hello-world/package.json index 6092b6b691..6a70e87c93 100644 --- a/boba_examples/turing-hello-world/package.json +++ b/boba_examples/turing-hello-world/package.json @@ -9,7 +9,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test test/hello-world.spec.ts", + "test:goerli": "hardhat --network boba_goerli test test/hello-world.spec.ts", "test:mainnet": "hardhat --network boba_mainnet test test/hello-world.spec.ts" }, "devDependencies": { diff --git a/boba_examples/turing-lending/.env.example b/boba_examples/turing-lending/.env.example index 861d3b1a3d..1125e5ec4d 100644 --- a/boba_examples/turing-lending/.env.example +++ b/boba_examples/turing-lending/.env.example @@ -1,3 +1,3 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ +GOERLI_URL=https://goerli.gateway.tenderly.co PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/boba_examples/turing-lending/package.json b/boba_examples/turing-lending/package.json index 50e8bfc845..a62bf14610 100644 --- a/boba_examples/turing-lending/package.json +++ b/boba_examples/turing-lending/package.json @@ -9,7 +9,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_examples/turing-nft-random/.env.example b/boba_examples/turing-nft-random/.env.example index 861d3b1a3d..1125e5ec4d 100644 --- a/boba_examples/turing-nft-random/.env.example +++ b/boba_examples/turing-nft-random/.env.example @@ -1,3 +1,3 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ +GOERLI_URL=https://goerli.gateway.tenderly.co PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/boba_examples/turing-nft-random/package.json b/boba_examples/turing-nft-random/package.json index dbc2204897..6774c7f27d 100644 --- a/boba_examples/turing-nft-random/package.json +++ b/boba_examples/turing-nft-random/package.json @@ -9,7 +9,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_examples/turing-stable-swap/.env.example b/boba_examples/turing-stable-swap/.env.example index 861d3b1a3d..1125e5ec4d 100644 --- a/boba_examples/turing-stable-swap/.env.example +++ b/boba_examples/turing-stable-swap/.env.example @@ -1,3 +1,3 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ +GOERLI_URL=https://goerli.gateway.tenderly.co PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/boba_examples/turing-stable-swap/package.json b/boba_examples/turing-stable-swap/package.json index b1315b12fd..b02c16102b 100644 --- a/boba_examples/turing-stable-swap/package.json +++ b/boba_examples/turing-stable-swap/package.json @@ -9,7 +9,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/boba_examples/turing-twitter-pay/package.json b/boba_examples/turing-twitter-pay/package.json index 7a6ddd943a..b3f5a1a51e 100644 --- a/boba_examples/turing-twitter-pay/package.json +++ b/boba_examples/turing-twitter-pay/package.json @@ -14,7 +14,7 @@ "build:contracts": "hardhat compile", "deploy": "hardhat run scripts/deploy.ts", "test:local": "hardhat --network boba_local test", - "test:rinkeby": "hardhat --network boba_rinkeby test", + "test:goerli": "hardhat --network boba_goerli test", "test:mainnet": "hardhat --network boba_mainnet test" }, "devDependencies": { diff --git a/faq.md b/faq.md index 57e87d622d..a9aa1c4445 100644 --- a/faq.md +++ b/faq.md @@ -38,7 +38,7 @@ Many wallets now allow applications to trigger a popup to switch between network \* [Click here for Boba Network Ethereum, the **production** network](https://gateway.boba.network). -\* [Click here for Boba Network Rinkeby, the **test** network](https://gateway.rinkeby.boba.network). +\* [Click here for Boba Network Goerli, the **test** network](https://gateway.boba.network). If your wallet does not support this feature, you will have to connect manually. The exact process for connecting your wallet to a Boba Ethereum network depends on the specific wallet software you're using. diff --git a/integration-tests/README.md b/integration-tests/README.md index 4c9214a423..8f9e5198be 100644 --- a/integration-tests/README.md +++ b/integration-tests/README.md @@ -27,4 +27,27 @@ You can also set environment variables on the command line instead of inside `.e L1_URL=whatever L2_URL=whatever yarn test:integration:live ``` -Note that this can take an extremely long time (~1hr). \ No newline at end of file +Note that this can take an extremely long time (~1hr). + + +### Run integration tests locally without rebuilding +``` +yarn && yarn build +export L1_URL=http://localhost:9545/ +export L2_URL=http://localhost:8545/ +export URL=http://localhost:8080/addresses.json +export BASE_URL=http://localhost:8080/addresses.json +export BOBA_URL=http://localhost:8080/boba-addr.json +export AA_BOBA_URL=http://localhost:8080/aa-addr.json +export BUNDLER_URL=http://localhost:3000/rpc +export ENABLE_GAS_REPORT=1 +export NO_NETWORK=1 +export RETRIES=200 +export L2_CHAINID=31338 #unfortunately, elsewhere the L2_CHAINID is called CHAIN_ID +export PRIVATE_KEY='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' +export PRIVATE_KEY_2='0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa' +export PRIVATE_KEY_3='0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61' +export BOBALINK_PRIVATE_KEY='0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e' +cd integration-tests +npx hardhat test --network boba --no-compile --config ./hardhat.config.ts test/eth-l2/boba_aa_fee_boba.spec +``` diff --git a/integration-tests/package.json b/integration-tests/package.json index 7636b2c34f..6b1f5f2277 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -18,20 +18,21 @@ "clean": "rimraf cache artifacts" }, "devDependencies": { - "@openzeppelin/test-helpers": "^0.5.15", + "@babel/eslint-parser": "^7.18.2", + "@boba/accountabstraction": "1.0.0", "@boba/api": "0.0.1", "@boba/contracts": "0.0.1", - "@boba/accountabstraction": "1.0.0", + "@bobanetwork/bundler_sdk": "*", "@eth-optimism/contracts": "^0.5.11", "@eth-optimism/core-utils": "0.8.1", "@eth-optimism/sdk": "1.0.1", - "@bobanetwork/bundler_sdk": "*", "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/providers": "^5.5.3", "@ethersproject/transactions": "^5.5.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@openzeppelin/contracts": "^4.4.0", + "@openzeppelin/test-helpers": "^0.5.15", "@types/chai": "^4.2.17", "@types/chai-as-promised": "^7.1.3", "@types/mocha": "^8.2.2", @@ -41,7 +42,6 @@ "@uniswap/v3-periphery": "^1.0.1", "@uniswap/v3-sdk": "^3.6.2", "async-mutex": "^0.3.2", - "@babel/eslint-parser": "^7.18.2", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "commander": "^8.3.0", @@ -60,13 +60,13 @@ "ethereum-waffle": "^3.3.0", "ethers": "^5.5.4", "hardhat": "^2.12.5", + "ip": "^1.1.5", "mocha": "^8.4.0", "mocha-junit-reporter": "^2.0.2", "mocha-multi-reporters": "^1.5.1", + "node-fetch": "^2.6.1", "prom-client": "^14.0.1", - "rimraf": "^3.0.2", "request-promise-native": "^1.0.5", - "node-fetch": "^2.6.1", - "ip": "^1.1.5" + "rimraf": "^3.0.2" } } diff --git a/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts b/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts index 759add91af..1990f0a9fa 100644 --- a/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts +++ b/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts @@ -40,7 +40,7 @@ describe('AA Alt-L1 Alt Token as Paymaster Fee Test\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SampleRecipient__factory = new ContractFactory( SampleRecipientJson.abi, @@ -92,6 +92,7 @@ describe('AA Alt-L1 Alt Token as Paymaster Fee Test\n', async () => { let postApproveDepositAmount let postApproveEtherBalance let signedOp + let tokenDifference before('the paymaster operator sets up the paymaster by staking and adding deposits', async () => { await GPODepositPaymaster.addStake(1, { value: utils.parseEther('2') }) @@ -181,6 +182,7 @@ describe('AA Alt-L1 Alt Token as Paymaster Fee Test\n', async () => { // message is received and emitted expect(log.args.message).to.eq('hello') const postCallTokenBalance = await L2_L1NativeToken.balanceOf(account) + tokenDifference = postApproveTokenBalance.sub(postCallTokenBalance) const postCallDepositAmount = (await GPODepositPaymaster.depositInfo(account)).amount const postCallEtherBalance = await env.l2Provider.getBalance(account) @@ -204,5 +206,25 @@ describe('AA Alt-L1 Alt Token as Paymaster Fee Test\n', async () => { // account for l1 submission cost too expect(BigNumber.from(postCallTokenBalance).add(logEP.args.actualGasCost)).to.closeTo(BigNumber.from(postApproveTokenBalance), utils.parseEther('0.3')) }) + it('should not allow a non-owner to withdraw paymaster tokens', async () => { + const ownerDeposits = await GPODepositPaymaster.balances(env.l2Wallet.address) + expect (ownerDeposits).to.be.eq(tokenDifference) + + await expect( + GPODepositPaymaster.connect(env.l2Wallet_2).withdrawTokensTo(env.l2Wallet_2.address, ownerDeposits) + ).to.be.reverted + }) + it('should allow the paymaster owner to withdraw paymaster tokens', async () => { + const ownerDeposits = await GPODepositPaymaster.balances(env.l2Wallet.address) + expect(ownerDeposits).to.be.eq(tokenDifference) + + const preTokenBalance = await L2_L1NativeToken.balanceOf(env.l2Wallet.address) + await GPODepositPaymaster.connect(env.l2Wallet).withdrawTokensTo(env.l2Wallet.address, ownerDeposits) + const postTokenBalance = await L2_L1NativeToken.balanceOf(env.l2Wallet.address) + + expect(postTokenBalance).to.be.eq(preTokenBalance.add(ownerDeposits)) + const currentOwnerDeposits = await GPODepositPaymaster.balances(env.l2Wallet.address) + expect(currentOwnerDeposits).to.be.eq(0) + }) }) }) diff --git a/integration-tests/test/alt-l2/boba_aa_bundler.spec.ts b/integration-tests/test/alt-l2/boba_aa_bundler.spec.ts new file mode 100644 index 0000000000..db1ea3f0db --- /dev/null +++ b/integration-tests/test/alt-l2/boba_aa_bundler.spec.ts @@ -0,0 +1,103 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +chai.use(chaiAsPromised) +const expect = chai.expect + +import { + Contract, + ContractFactory, + utils, + constants, + BigNumber, + Wallet, +} from 'ethers' + +import { getFilteredLogIndex } from './shared/utils' + +import { OptimismEnv } from './shared/env' +import { HDNode, hexConcat, hexZeroPad, parseEther } from 'ethers/lib/utils' +// use local sdk +import { SimpleAccountAPI } from '@bobanetwork/bundler_sdk' +import SimpleAccountFactoryJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccountFactory.sol/SimpleAccountFactory.json' +import SampleRecipientJson from '../../artifacts/contracts/SampleRecipient.sol/SampleRecipient.json' +import { HttpRpcClient } from '@bobanetwork/bundler_sdk/dist/HttpRpcClient' +import EntryPointJson from '@boba/accountabstraction/artifacts/contracts/core/EntryPoint.sol/EntryPoint.json' +import { + EntryPoint, +} from "@boba/accountabstraction/types"; + +describe('AA Bundler Test\n', async () => { + let env: OptimismEnv + let SimpleAccountFactory__factory: ContractFactory + let recipient: Contract + + let bundlerProvider: HttpRpcClient + + let SampleRecipient__factory: ContractFactory + + let accountFactory + let account + let accountAPI: SimpleAccountAPI + + let entryPoint: EntryPoint + + before(async () => { + env = await OptimismEnv.new() + const entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint + + entryPoint = new Contract( + entryPointAddress, + EntryPointJson.abi, + env.l2Wallet + ) as EntryPoint + + SampleRecipient__factory = new ContractFactory( + SampleRecipientJson.abi, + SampleRecipientJson.bytecode, + env.l2Wallet + ) + + recipient = await SampleRecipient__factory.deploy() + + bundlerProvider = new HttpRpcClient( + env.bundlerUrl, + entryPoint.address, + await env.l2Wallet.provider.getNetwork().then((net) => net.chainId) + ) + + SimpleAccountFactory__factory = new ContractFactory( + SimpleAccountFactoryJson.abi, + SimpleAccountFactoryJson.bytecode, + env.l2Wallet + ) + accountFactory = await SimpleAccountFactory__factory.deploy( + entryPoint.address + ) + await accountFactory.deployed() + console.log('Account Factory deployed to:', accountFactory.address) + await accountFactory.createAccount(env.l2Wallet.address, 0) + account = await accountFactory.getAddress(env.l2Wallet.address, 0) + + accountAPI = new SimpleAccountAPI({ + provider: env.l2Provider, + entryPointAddress, + owner: env.l2Wallet, + accountAddress: account, + }) + + }) + + describe('query rpc calls: eth_estimateUserOperationGas, eth_callUserOperation', async () => { + it('estimateUserOperationGas should estimate even without eth', async () => { + const op = await accountAPI.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['hello']), + }) + + const ret: any = await bundlerProvider.estimateUserOpGas(op) + + expect(parseInt(ret.verificationGas, 16)).to.be.closeTo(30000, 100000) + expect(parseInt(ret.callGasLimit, 16)).to.be.closeTo(25000, 50000) + }) + }) +}) diff --git a/integration-tests/test/alt-l2/boba_aa_wallet.spec.ts b/integration-tests/test/alt-l2/boba_aa_wallet.spec.ts index 7f977405a6..26f29cebe5 100644 --- a/integration-tests/test/alt-l2/boba_aa_wallet.spec.ts +++ b/integration-tests/test/alt-l2/boba_aa_wallet.spec.ts @@ -26,7 +26,7 @@ describe('AA Wallet Test\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SimpleAccount__factory = new ContractFactory( SimpleAccountFactoryJson.abi, diff --git a/integration-tests/test/alt-l2/erc1155_bridge.spec.ts b/integration-tests/test/alt-l2/erc1155_bridge.spec.ts index cd0718527b..f09467d379 100644 --- a/integration-tests/test/alt-l2/erc1155_bridge.spec.ts +++ b/integration-tests/test/alt-l2/erc1155_bridge.spec.ts @@ -1070,7 +1070,7 @@ describe('ERC1155 Bridge Test', async () => { const approveTX = await L1ERC1155.connect( env.l2Wallet_2 - ).setApprovalForAll(L1Bridge.address, true) + ).setApprovalForAll(L1Bridge.address, true, { gasLimit: 1000000 }) await approveTX.wait() await env.waitForXDomainTransaction( @@ -1080,7 +1080,8 @@ describe('ERC1155 Bridge Test', async () => { DUMMY_TOKEN_ID_1, DUMMY_TOKEN_AMOUNT_1, '0x', - 999999 + 999999, + { gasLimit: 1000000 } ) ) diff --git a/integration-tests/test/eth-l2/boba-api.spec.ts b/integration-tests/test/eth-l2/boba-api.spec.ts index 75211f9dac..91e976b1b6 100644 --- a/integration-tests/test/eth-l2/boba-api.spec.ts +++ b/integration-tests/test/eth-l2/boba-api.spec.ts @@ -69,7 +69,7 @@ describe('Boba API Tests', async () => { process.env.L2_BOBA_ADDRESS = L2Boba.address }) - describe('Mainnet and Rinkeby', async () => { + describe('Mainnet and Goerli', async () => { it('should swap BOBA for ETH', async () => { const owner = env.l2Wallet_2.address const spender = Boba_GasPriceOracle.address diff --git a/integration-tests/test/eth-l2/boba_aa_bundler.spec.ts b/integration-tests/test/eth-l2/boba_aa_bundler.spec.ts new file mode 100644 index 0000000000..db1ea3f0db --- /dev/null +++ b/integration-tests/test/eth-l2/boba_aa_bundler.spec.ts @@ -0,0 +1,103 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +chai.use(chaiAsPromised) +const expect = chai.expect + +import { + Contract, + ContractFactory, + utils, + constants, + BigNumber, + Wallet, +} from 'ethers' + +import { getFilteredLogIndex } from './shared/utils' + +import { OptimismEnv } from './shared/env' +import { HDNode, hexConcat, hexZeroPad, parseEther } from 'ethers/lib/utils' +// use local sdk +import { SimpleAccountAPI } from '@bobanetwork/bundler_sdk' +import SimpleAccountFactoryJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccountFactory.sol/SimpleAccountFactory.json' +import SampleRecipientJson from '../../artifacts/contracts/SampleRecipient.sol/SampleRecipient.json' +import { HttpRpcClient } from '@bobanetwork/bundler_sdk/dist/HttpRpcClient' +import EntryPointJson from '@boba/accountabstraction/artifacts/contracts/core/EntryPoint.sol/EntryPoint.json' +import { + EntryPoint, +} from "@boba/accountabstraction/types"; + +describe('AA Bundler Test\n', async () => { + let env: OptimismEnv + let SimpleAccountFactory__factory: ContractFactory + let recipient: Contract + + let bundlerProvider: HttpRpcClient + + let SampleRecipient__factory: ContractFactory + + let accountFactory + let account + let accountAPI: SimpleAccountAPI + + let entryPoint: EntryPoint + + before(async () => { + env = await OptimismEnv.new() + const entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint + + entryPoint = new Contract( + entryPointAddress, + EntryPointJson.abi, + env.l2Wallet + ) as EntryPoint + + SampleRecipient__factory = new ContractFactory( + SampleRecipientJson.abi, + SampleRecipientJson.bytecode, + env.l2Wallet + ) + + recipient = await SampleRecipient__factory.deploy() + + bundlerProvider = new HttpRpcClient( + env.bundlerUrl, + entryPoint.address, + await env.l2Wallet.provider.getNetwork().then((net) => net.chainId) + ) + + SimpleAccountFactory__factory = new ContractFactory( + SimpleAccountFactoryJson.abi, + SimpleAccountFactoryJson.bytecode, + env.l2Wallet + ) + accountFactory = await SimpleAccountFactory__factory.deploy( + entryPoint.address + ) + await accountFactory.deployed() + console.log('Account Factory deployed to:', accountFactory.address) + await accountFactory.createAccount(env.l2Wallet.address, 0) + account = await accountFactory.getAddress(env.l2Wallet.address, 0) + + accountAPI = new SimpleAccountAPI({ + provider: env.l2Provider, + entryPointAddress, + owner: env.l2Wallet, + accountAddress: account, + }) + + }) + + describe('query rpc calls: eth_estimateUserOperationGas, eth_callUserOperation', async () => { + it('estimateUserOperationGas should estimate even without eth', async () => { + const op = await accountAPI.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['hello']), + }) + + const ret: any = await bundlerProvider.estimateUserOpGas(op) + + expect(parseInt(ret.verificationGas, 16)).to.be.closeTo(30000, 100000) + expect(parseInt(ret.callGasLimit, 16)).to.be.closeTo(25000, 50000) + }) + }) +}) diff --git a/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts b/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts index 7a670e6de9..6197f4cad5 100644 --- a/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts @@ -45,7 +45,7 @@ describe('AA Alt Fee Token Test\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SampleRecipient__factory = new ContractFactory( SampleRecipientJson.abi, diff --git a/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts b/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts index e0b1b466a2..a8febbf16d 100644 --- a/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts @@ -43,7 +43,7 @@ describe('AA Boba as Fee token Test\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SampleRecipient__factory = new ContractFactory( SampleRecipientJson.abi, @@ -113,6 +113,7 @@ describe('AA Boba as Fee token Test\n', async () => { let postApproveDepositAmount let postApproveEtherBalance let signedOp + let tokenDifference before( 'the paymaster operator sets up the paymaster by staking and adding deposits', @@ -224,6 +225,7 @@ describe('AA Boba as Fee token Test\n', async () => { // message is received and emitted expect(log.args.message).to.eq('hello') const postCallTokenBalance = await L2BOBAToken.balanceOf(account) + tokenDifference = postApproveTokenBalance.sub(postCallTokenBalance) const postCallDepositAmount = ( await BobaDepositPaymaster.depositInfo(L2BOBAToken.address, account) ).amount @@ -255,5 +257,25 @@ describe('AA Boba as Fee token Test\n', async () => { utils.parseEther('0.0001') ) }) + it('should not allow a non-owner to withdraw paymaster tokens', async () => { + const ownerDeposits = await BobaDepositPaymaster.balances(L2BOBAToken.address, env.l2Wallet.address) + expect (ownerDeposits).to.be.eq(tokenDifference) + + await expect( + BobaDepositPaymaster.connect(env.l2Wallet_2).withdrawTokensTo(L2BOBAToken.address, env.l2Wallet_2.address, ownerDeposits) + ).to.be.reverted + }) + it('should allow the paymaster owner to withdraw paymaster tokens', async () => { + const ownerDeposits = await BobaDepositPaymaster.balances(L2BOBAToken.address, env.l2Wallet.address) + expect(ownerDeposits).to.be.eq(tokenDifference) + + const preTokenBalance = await L2BOBAToken.balanceOf(env.l2Wallet.address) + await BobaDepositPaymaster.connect(env.l2Wallet).withdrawTokensTo(L2BOBAToken.address, env.l2Wallet.address, ownerDeposits) + const postTokenBalance = await L2BOBAToken.balanceOf(env.l2Wallet.address) + + expect(postTokenBalance).to.be.eq(preTokenBalance.add(ownerDeposits)) + const currentOwnerDeposits = await BobaDepositPaymaster.balances(L2BOBAToken.address, env.l2Wallet.address) + expect(currentOwnerDeposits).to.be.eq(0) + }) }) }) diff --git a/integration-tests/test/eth-l2/boba_aa_sponsoring_fee.spec.ts b/integration-tests/test/eth-l2/boba_aa_sponsoring_fee.spec.ts index f0f93bbdc4..85d88616b3 100644 --- a/integration-tests/test/eth-l2/boba_aa_sponsoring_fee.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_sponsoring_fee.spec.ts @@ -39,7 +39,7 @@ describe('Sponsoring Tx\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SampleRecipient__factory = new ContractFactory( SampleRecipientJson.abi, diff --git a/integration-tests/test/eth-l2/boba_aa_wallet.spec.ts b/integration-tests/test/eth-l2/boba_aa_wallet.spec.ts index f5094a0adf..44f6b3cb47 100644 --- a/integration-tests/test/eth-l2/boba_aa_wallet.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_wallet.spec.ts @@ -27,7 +27,7 @@ describe('AA Wallet Test\n', async () => { before(async () => { env = await OptimismEnv.new() - entryPointAddress = env.addressesAABOBA.L2_BOBA_EntryPoint + entryPointAddress = env.addressesAABOBA.L2_Boba_EntryPoint SimpleAccount__factory = new ContractFactory( SimpleAccountFactoryJson.abi, diff --git a/integration-tests/test/eth-l2/pool_dao_actions.spec.ts b/integration-tests/test/eth-l2/pool_dao_actions.spec.ts index 0d1306ff27..06ededbe5e 100644 --- a/integration-tests/test/eth-l2/pool_dao_actions.spec.ts +++ b/integration-tests/test/eth-l2/pool_dao_actions.spec.ts @@ -114,7 +114,7 @@ describe('Dao Action Test', async () => { ) // set admin Timelock - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta1 = (await getTimestamp()) + eta_delay_s const setPendingAdminData = utils.defaultAbiCoder.encode( @@ -133,7 +133,7 @@ describe('Dao Action Test', async () => { await setPendingAdminTx.wait() // call initiate() to complete setAdmin - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta2 = (await getTimestamp()) + eta_delay_s const initiateData = utils.defaultAbiCoder.encode( diff --git a/l2geth/README.md b/l2geth/README.md index b2f26bc8a9..d659017ed1 100644 --- a/l2geth/README.md +++ b/l2geth/README.md @@ -156,17 +156,17 @@ use separate accounts for play-money and real-money. Unless you manually move accounts, `geth` will by default correctly separate the two networks and will not make any accounts available between them.* -### Full node on the Rinkeby test network +### Full node on the Goerli test network The above test network is a cross-client one based on the ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty/security. Go Ethereum also supports connecting -to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) +to a proof-of-authority based test network called [*Goerli*](https://www.goerli.net) (operated by members of the community). This network is lighter, more secure, but is only supported by go-ethereum. ```shell -$ geth --rinkeby console +$ geth --goerli console ``` ### Configuration diff --git a/l2geth/cmd/clef/tutorial.md b/l2geth/cmd/clef/tutorial.md index f15376bb14..26f2b08a93 100644 --- a/l2geth/cmd/clef/tutorial.md +++ b/l2geth/cmd/clef/tutorial.md @@ -41,12 +41,12 @@ You should treat 'masterseed.json' with utmost secrecy and make a backup of it! ## Remote interactions -Clef is capable of managing both key-file based accounts as well as hardware wallets. To evaluate clef, we're going to point it to our Rinkeby testnet keystore and specify the Rinkeby chain ID for signing (Clef doesn't have a backing chain, so it doesn't know what network it runs on). +Clef is capable of managing both key-file based accounts as well as hardware wallets. To evaluate clef, we're going to point it to our Goerli testnet keystore and specify the Goerli chain ID for signing (Clef doesn't have a backing chain, so it doesn't know what network it runs on). ```text -$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 +$ clef --keystore ~/.ethereum/goerli/keystore --chainid 4 -INFO [07-01|11:00:46.385] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +INFO [07-01|11:00:46.385] Starting signer chainid=4 keystore=$HOME/.ethereum/goerli/keystore light-kdf=false advanced=false DEBUG[07-01|11:00:46.389] FS scan times list=3.521941ms set=9.017µs diff=4.112µs DEBUG[07-01|11:00:46.391] Ledger support enabled DEBUG[07-01|11:00:46.391] Trezor support enabled via HID @@ -76,9 +76,9 @@ This will prompt the user within the Clef CLI to confirm or deny the request: A request has been made to list all accounts. You can select which accounts the caller can see [x] 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3 - URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2017-04-14T15-15-00.327614556Z--d9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 + URL: keystore://$HOME/.ethereum/goerli/keystore/UTC--2017-04-14T15-15-00.327614556Z--d9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [x] 0x086278A6C067775F71d6B2BB1856Db6E28c30418 - URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2018-02-06T22-53-11.211657239Z--086278a6c067775f71d6b2bb1856db6e28c30418 + URL: keystore://$HOME/.ethereum/goerli/keystore/UTC--2018-02-06T22-53-11.211657239Z--086278a6c067775f71d6b2bb1856db6e28c30418 ------------------------------------------- Request context: NA -> NA -> NA @@ -106,7 +106,7 @@ Apart from listing accounts, you can also *request* creating a new account; sign ## Automatic rules -For most users, manually confirming every transaction is the way to go. However, there are cases when it makes sense to set up some rules which permit Clef to sign a transaction without prompting the user. One such example would be running a signer on Rinkeby or other PoA networks. +For most users, manually confirming every transaction is the way to go. However, there are cases when it makes sense to set up some rules which permit Clef to sign a transaction without prompting the user. One such example would be running a signer on Goerli or other PoA networks. For starters, we can create a rule file that automatically permits anyone to list our available accounts without user confirmation. The rule file is a tiny JavaScript snippet that you can program however you want: @@ -131,10 +131,10 @@ INFO [07-01|13:25:03.290] Ruleset attestation updated sha256=645b58 At this point, we can start Clef with the rule file: ```text -$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js +$ clef --keystore ~/.ethereum/goerli/keystore --chainid 4 --rules rules.js INFO [07-01|13:39:49.726] Rule engine configured file=rules.js -INFO [07-01|13:39:49.726] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +INFO [07-01|13:39:49.726] Starting signer chainid=4 keystore=$HOME/.ethereum/goerli/keystore light-kdf=false advanced=false DEBUG[07-01|13:39:49.726] FS scan times list=35.15µs set=4.251µs diff=2.766µs DEBUG[07-01|13:39:49.727] Ledger support enabled DEBUG[07-01|13:39:49.727] Trezor support enabled via HID @@ -244,10 +244,10 @@ INFO [07-01|14:11:28.509] Ruleset attestation updated sha256=f163a1 Restart Clef with the new rules in place: ``` -$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js +$ clef --keystore ~/.ethereum/goerli/keystore --chainid 4 --rules rules.js INFO [07-01|14:12:41.636] Rule engine configured file=rules.js -INFO [07-01|14:12:41.636] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +INFO [07-01|14:12:41.636] Starting signer chainid=4 keystore=$HOME/.ethereum/goerli/keystore light-kdf=false advanced=false DEBUG[07-01|14:12:41.636] FS scan times list=46.722µs set=4.47µs diff=2.157µs DEBUG[07-01|14:12:41.637] Ledger support enabled DEBUG[07-01|14:12:41.637] Trezor support enabled via HID @@ -296,16 +296,16 @@ Of course, as awesome as Clef is, it's not feasible to interact with it via JSON Until then however, we're trying to pave the way via Geth. Geth v1.9.0 has built in support via `--signer ` for using a local or remote Clef instance as an account backend! -We can try this by running Clef with our previous rules on Rinkeby (for now it's a good idea to allow auto-listing accounts, since Geth likes to retrieve them once in a while). +We can try this by running Clef with our previous rules on Goerli (for now it's a good idea to allow auto-listing accounts, since Geth likes to retrieve them once in a while). ```text -$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js +$ clef --keystore ~/.ethereum/goerli/keystore --chainid 4 --rules rules.js ``` In a different window we can start Geth, list our accounts, even list our wallets to see where the accounts originate from: ```text -$ geth --rinkeby --signer=~/.clef/clef.ipc console +$ geth --goerli --signer=~/.clef/clef.ipc console > eth.accounts ["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x086278a6c067775f71d6b2bb1856db6e28c30418"] diff --git a/l2geth/core/vm/evm.go b/l2geth/core/vm/evm.go index 5d3ae90562..e7039f115b 100644 --- a/l2geth/core/vm/evm.go +++ b/l2geth/core/vm/evm.go @@ -34,6 +34,7 @@ import ( "github.com/ethereum-optimism/optimism/l2geth/rollup/rcfg" "github.com/ethereum-optimism/optimism/l2geth/rollup/util" "github.com/ethereum-optimism/optimism/l2geth/rpc" + "github.com/ethereum-optimism/optimism/l2geth/statedumper" "golang.org/x/crypto/sha3" ) @@ -41,6 +42,9 @@ import ( // deployed contract addresses (relevant after the account abstraction). var emptyCodeHash = crypto.Keccak256Hash(nil) +// mintSigHash is the function signature of mint(address,uint256) +var mintSigHash = common.FromHex("0x40c10f19") + type ( // CanTransferFunc is the signature of a transfer guard function CanTransferFunc func(StateDB, common.Address, *big.Int) bool @@ -579,6 +583,20 @@ func (evm *EVM) bobaTuringCall(input []byte, caller common.Address, mayBlock boo // the necessary steps to create accounts and reverses the state in case of an // execution error or failed value transfer. func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { + if addr == dump.MessagePasserAddress { + statedumper.WriteMessage(caller.Address(), input) + } + + if addr == dump.OvmEthAddress { + // We need at least 4 bytes + 32 bytes for the recipient address, then + // address will be found at bytes 16-36. 0x40c10f19 is the function + // selector for mint(address,uint256). + if len(input) >= 36 && bytes.Equal(input[:4], mintSigHash) { + recipient := common.BytesToAddress(input[16:36]) + statedumper.WriteETH(recipient) + } + } + if evm.vmConfig.NoRecursion && evm.depth > 0 { return nil, gas, nil } diff --git a/l2geth/rollup/dump/constants.go b/l2geth/rollup/dump/constants.go index b99a1a2496..ecacdf7103 100644 --- a/l2geth/rollup/dump/constants.go +++ b/l2geth/rollup/dump/constants.go @@ -7,3 +7,4 @@ import ( var OvmEthAddress = common.HexToAddress("0x4200000000000000000000000000000000000006") var OvmFeeWallet = common.HexToAddress("0x4200000000000000000000000000000000000011") var OvmWhitelistAddress = common.HexToAddress("0x4200000000000000000000000000000000000002") +var MessagePasserAddress = common.HexToAddress("0x4200000000000000000000000000000000000000") diff --git a/l2geth/statedumper/dumper.go b/l2geth/statedumper/dumper.go new file mode 100644 index 0000000000..bf3c1b567a --- /dev/null +++ b/l2geth/statedumper/dumper.go @@ -0,0 +1,82 @@ +package statedumper + +import ( + "fmt" + "io" + "os" + "sync" + + "github.com/ethereum-optimism/optimism/l2geth/common" +) + +type StateDumper interface { + WriteETH(address common.Address) + WriteMessage(sender common.Address, msg []byte) +} + +var DefaultStateDumper StateDumper + +func NewStateDumper() StateDumper { + path := os.Getenv("L2GETH_STATE_DUMP_PATH") + if path == "" { + return &noopStateDumper{} + } + + f, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o755) + if err != nil { + panic(err) + } + + return &FileStateDumper{ + f: f, + ethCache: make(map[common.Address]bool), + } +} + +type FileStateDumper struct { + f io.Writer + ethCache map[common.Address]bool + mtx sync.Mutex +} + +func (s *FileStateDumper) WriteETH(address common.Address) { + s.mtx.Lock() + defer s.mtx.Unlock() + if s.ethCache[address] { + return + } + s.ethCache[address] = true + + if _, err := s.f.Write([]byte(fmt.Sprintf("ETH|%s\n", address.Hex()))); err != nil { + panic(err) + } +} + +func (s *FileStateDumper) WriteMessage(sender common.Address, msg []byte) { + s.mtx.Lock() + defer s.mtx.Unlock() + if _, err := s.f.Write([]byte(fmt.Sprintf("MSG|%s|%x\n", sender.Hex(), msg))); err != nil { + panic(err) + } +} + +type noopStateDumper struct { +} + +func (n *noopStateDumper) WriteETH(address common.Address) { +} + +func (n *noopStateDumper) WriteMessage(sender common.Address, msg []byte) { +} + +func init() { + DefaultStateDumper = NewStateDumper() +} + +func WriteETH(address common.Address) { + DefaultStateDumper.WriteETH(address) +} + +func WriteMessage(sender common.Address, msg []byte) { + DefaultStateDumper.WriteMessage(sender, msg) +} diff --git a/l2geth/statedumper/dumper_test.go b/l2geth/statedumper/dumper_test.go new file mode 100644 index 0000000000..098f4f2bcb --- /dev/null +++ b/l2geth/statedumper/dumper_test.go @@ -0,0 +1,36 @@ +package statedumper + +import ( + "io" + "os" + "testing" + + "github.com/ethereum-optimism/optimism/l2geth/common" +) + +func TestFileStateDumper(t *testing.T) { + f, err := os.CreateTemp("", "") + if err != nil { + t.Fatalf("error creating file: %v", err) + } + err = os.Setenv("L2GETH_STATE_DUMP_PATH", f.Name()) + if err != nil { + t.Fatalf("error setting env file: %v", err) + } + dumper := NewStateDumper() + addr := common.Address{19: 0x01} + dumper.WriteETH(addr) + dumper.WriteMessage(addr, []byte("hi")) + _, err = f.Seek(0, 0) + if err != nil { + t.Fatalf("error seeking: %v", err) + } + data, err := io.ReadAll(f) + if err != nil { + t.Fatalf("error reading: %v", err) + } + dataStr := string(data) + if dataStr != "ETH|0x0000000000000000000000000000000000000001\nMSG|0x0000000000000000000000000000000000000001|6869\n" { + t.Fatalf("invalid data. got: %s", dataStr) + } +} diff --git a/ops/docker-compose-side.yml b/ops/docker-compose-side.yml index daee8da500..52ef7f3f2e 100644 --- a/ops/docker-compose-side.yml +++ b/ops/docker-compose-side.yml @@ -32,7 +32,6 @@ services: dockerfile: ./ops/docker/Dockerfile.packages target: gas_oracle environment: - ADDRESS_MANAGER_ADDRESS: "0x5FbDB2315678afecb367f032d93F642f64180aa3" L1_NODE_WEB3_URL: http://l1_chain:8545 L2_NODE_WEB3_URL: http://l2geth:8545 GAS_PRICE_ORACLE_ADDRESS: "0x420000000000000000000000000000000000000F" diff --git a/ops/docker/Dockerfile.geth b/ops/docker/Dockerfile.geth index 9409fab6a8..6c2c406ced 100644 --- a/ops/docker/Dockerfile.geth +++ b/ops/docker/Dockerfile.geth @@ -1,5 +1,5 @@ # Build Geth in a stock Go builder container -FROM golang:1.15-alpine3.13 as builder +FROM golang:1.18-alpine3.15 as builder RUN apk add --no-cache make gcc musl-dev linux-headers git @@ -7,7 +7,7 @@ ADD ./l2geth /go-ethereum RUN cd /go-ethereum && make geth # Pull Geth into a second stage deploy alpine container -FROM alpine:3.13 +FROM alpine:3.15 RUN apk add --no-cache ca-certificates jq curl COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ diff --git a/ops/scripts/integration-tests.sh b/ops/scripts/integration-tests.sh index 4155de502d..06516fcc59 100755 --- a/ops/scripts/integration-tests.sh +++ b/ops/scripts/integration-tests.sh @@ -19,7 +19,7 @@ echo "Calling: "$AA_BOBA_URL if [[ ! -z "$AA_BOBA_URL" ]]; then # get the addrs from the URL provided ADDRESSES=$(curl --fail --show-error --silent --retry-connrefused --retry $RETRIES --retry-delay 5 $AA_BOBA_URL) - echo $ADDRESSES | jq -r '.L2_BOBA_EntryPoint' + echo $ADDRESSES | jq -r '.L2_Boba_EntryPoint' fi echo "Calling: "$L2_URL # wait for the sequencer to be up diff --git a/ops_boba/api/watcher-api/README.md b/ops_boba/api/watcher-api/README.md index 3d1b87e9b1..18324b1640 100644 --- a/ops_boba/api/watcher-api/README.md +++ b/ops_boba/api/watcher-api/README.md @@ -1,7 +1,7 @@ # Watcher API -> Mainnet Endpoint: https://api-watcher.mainnet.boba.network/ -> Rinkeby Endpoint: https://api-watcher.rinkeby.boba.network/ +> Mainnet Endpoint: https://api-watcher.mainnet.boba.network/ +> Goerli Endpoint: https://api-watcher.goerli.boba.network/ ## Methods @@ -221,7 +221,7 @@ ### Airdrop -#### get.l1.airdrop (POST) / get.l2.airdrop (POST) +#### get.l1.airdrop (POST) / get.l2.airdrop (POST) **Request Body** @@ -252,7 +252,7 @@ } ``` -#### send.l1.airdrop (POST) / send.l2.airdrop (POST) +#### send.l1.airdrop (POST) / send.l2.airdrop (POST) **Request Body** @@ -266,7 +266,7 @@ **Effect on DB entries** When `send.l_.airdrop` is called, the `claimed` flag should change to `true` and the `claimedTimestamp` should change to the `now` unix seconds timestamp, for example, `1636964190`. -If `claimed` already === `true` then calling `send.l_.airdrop` should have no effect. +If `claimed` already === `true` then calling `send.l_.airdrop` should have no effect. **Response Body** @@ -290,8 +290,8 @@ If `claimed` already === `true` then calling `send.l_.airdrop` should have no ef **Effect on DB entries** -When `initiate.l1.airdrop` is called, the `claimUnlockTime` should change from `null` to a unix seconds timestamp = now + 30 days, for example, `1636964190`. -If `claimUnlockTime` already !== `null` then calling `initiate.l1.airdrop` should have no effect. +When `initiate.l1.airdrop` is called, the `claimUnlockTime` should change from `null` to a unix seconds timestamp = now + 30 days, for example, `1636964190`. +If `claimUnlockTime` already !== `null` then calling `initiate.l1.airdrop` should have no effect. **Response Body** diff --git a/ops_boba/api/watcher-api/deploy.sh b/ops_boba/api/watcher-api/deploy.sh index f885353bb8..84c4333971 100755 --- a/ops_boba/api/watcher-api/deploy.sh +++ b/ops_boba/api/watcher-api/deploy.sh @@ -1,9 +1,9 @@ #!/bin/bash if [[$STAGE == "all"]]; then - echo 'You set STAGE to rinkeby. Deploying to Rinkeby...' - cp env-rinkeby.yml env.yml && - serverless -c serverless-rinkeby.yml deploy && + echo 'You set STAGE to goerli. Deploying to Goerli...' + cp env-goerli.yml env.yml && + serverless -c serverless-goerli.yml deploy && rm -rf env.yml && rm -rf .serverless && echo 'You set STAGE to mainnet. Deploying to Mainnet...' @@ -13,10 +13,10 @@ if [[$STAGE == "all"]]; then rm -rf .serverless fi -if [[ $STAGE == "rinkeby" ]]; then +if [[ $STAGE == "goerli" ]]; then echo 'You set STAGE to rinkeby. Deploying to Rinkeby...' - cp env-rinkeby.yml env.yml && - serverless -c serverless-rinkeby.yml deploy && + cp env-goerli.yml env.yml && + serverless -c serverless-goerli.yml deploy && rm -rf env.yml && rm -rf .serverless fi diff --git a/packages/boba/account-abstraction/deploy/5-dump-addresses.ts b/packages/boba/account-abstraction/deploy/5-dump-addresses.ts index 397a9fdfbf..778cda168e 100644 --- a/packages/boba/account-abstraction/deploy/5-dump-addresses.ts +++ b/packages/boba/account-abstraction/deploy/5-dump-addresses.ts @@ -10,7 +10,7 @@ const deployFn: DeployFunction = async (hre) => { for (const key in deployments) { if (deployments.hasOwnProperty(key)) { if (key == 'EntryPoint') { - contracts['L2_BOBA_'+key] = deployments[key].address + contracts['L2_Boba_'+key] = deployments[key].address } else { contracts['L2_'+key] = deployments[key].address } diff --git a/packages/boba/account-abstraction/deployments/boba_bnb_testnet/addresses.json b/packages/boba/account-abstraction/deployments/boba_bnb_testnet/addresses.json index f7f8b1a726..ac5b0bb33c 100644 --- a/packages/boba/account-abstraction/deployments/boba_bnb_testnet/addresses.json +++ b/packages/boba/account-abstraction/deployments/boba_bnb_testnet/addresses.json @@ -1,4 +1,4 @@ { - "L2_BOBA_EntryPoint": "0xb6b46ef8aa4edce3f3a1b671e9fba945cc8b8642", + "L2_Boba_EntryPoint": "0xb6b46ef8aa4edce3f3a1b671e9fba945cc8b8642", "L2_EntryPointWrapper": "0x5fd867caa5ce9a52174d6630ec4ee9e87d818bfe" } \ No newline at end of file diff --git a/packages/boba/account-abstraction/deployments/boba_goerli/addresses.json b/packages/boba/account-abstraction/deployments/boba_goerli/addresses.json index 1539ee9353..3338376e9b 100644 --- a/packages/boba/account-abstraction/deployments/boba_goerli/addresses.json +++ b/packages/boba/account-abstraction/deployments/boba_goerli/addresses.json @@ -1,5 +1,5 @@ { - "L2_BOBA_EntryPoint": "0xa6e2cbb294d3b84e7900daf0052ffe26bb1328ff", + "L2_Boba_EntryPoint": "0xa6e2cbb294d3b84e7900daf0052ffe26bb1328ff", "L2_BobaDepositPaymaster": "0x06C1D387270E322D3B7b9Bed6777aaF8Aead4707", "L2_BobaVerifyingPaymaster": "0xAa210aEC4649C92E1d9b7267AD767eF3dFa20677", "L2_EntryPointWrapper": "0xb1b04b6ea9e013c0ff1970965d5d6d6e637e98d7" diff --git a/packages/boba/account-abstraction/package.json b/packages/boba/account-abstraction/package.json index d5ef4568b3..e1326f6b08 100644 --- a/packages/boba/account-abstraction/package.json +++ b/packages/boba/account-abstraction/package.json @@ -33,7 +33,8 @@ "smart", "contracts", "account-abstraction", - "eip-4337" + "eip-4337", + "boba" ], "license": "ISC", "devDependencies": { @@ -66,7 +67,6 @@ "@gnosis.pm/safe-contracts": "^1.3.0", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@openzeppelin/contracts": "^4.2.0", - "@openzeppelin/contracts-upgradeable": "4.3.2", "@thehubbleproject/bls": "^0.5.1", "@typechain/hardhat": "^6.1.2", "@types/mocha": "^9.0.0", diff --git a/packages/boba/bundler/hardhat.config.ts b/packages/boba/bundler/hardhat.config.ts index 6d87732fa4..2a9671fa80 100644 --- a/packages/boba/bundler/hardhat.config.ts +++ b/packages/boba/bundler/hardhat.config.ts @@ -13,20 +13,6 @@ if (mnemonicFileName != null && fs.existsSync(mnemonicFileName)) { mnemonic = fs.readFileSync(mnemonicFileName, 'ascii').trim() } -const infuraUrl = (name: string): string => `https://${name}.infura.io/v3/${process.env.INFURA_ID}` - -function getNetwork (url: string): NetworkUserConfig { - return { - url, - accounts: { - mnemonic - } - } -} - -function getInfuraNetwork (name: string): NetworkUserConfig { - return getNetwork(infuraUrl(name)) -} const config: HardhatUserConfig = { typechain: { @@ -38,7 +24,12 @@ const config: HardhatUserConfig = { url: 'http://localhost:8545/', saveDeployments: false }, - goerli: getInfuraNetwork('goerli') + goerli: { + url: 'https://goerli.gateway.tenderly.co', + accounts: { + mnemonic + } + } }, solidity: { version: '0.8.15', diff --git a/packages/boba/bundler/package.json b/packages/boba/bundler/package.json index 0b7d604f04..b3e425f212 100644 --- a/packages/boba/bundler/package.json +++ b/packages/boba/bundler/package.json @@ -20,7 +20,6 @@ }, "dependencies": { "@openzeppelin/contracts": "^4.2.0", - "@openzeppelin/contracts-upgradeable": "4.3.2", "@boba/accountabstraction": "^1.0.0", "@boba/bundler_utils": "^0.2.3", "@bobanetwork/bundler_sdk": "*", diff --git a/packages/boba/bundler/src/BundlerConfig.ts b/packages/boba/bundler/src/BundlerConfig.ts index 7702a54723..e89cf2ec85 100644 --- a/packages/boba/bundler/src/BundlerConfig.ts +++ b/packages/boba/bundler/src/BundlerConfig.ts @@ -22,6 +22,8 @@ export interface BundlerConfig { addressManager: string l1NodeWeb3Url: string enableDebugMethods: boolean + l2Offset?: number + logsChunkSize?: number } // TODO: implement merging config (args -> config.js -> default) and runtime shape validation @@ -46,6 +48,8 @@ export const BundlerConfigShape = { addressManager: ow.string, l1NodeWeb3Url: ow.string, enableDebugMethods: ow.boolean, + l2Offset: ow.optional.number, + logsChunkSize: ow.optional.number, } // TODO: consider if we want any default fields at all @@ -60,4 +64,6 @@ export const bundlerConfigDefault: Partial = { autoBundleInterval: 1, autoBundleMempoolSize: 1, enableDebugMethods: false, + l2Offset: 0, + logsChunkSize: 5000, } diff --git a/packages/boba/bundler/src/BundlerServer.ts b/packages/boba/bundler/src/BundlerServer.ts index 0d58f33d46..6997909bf2 100644 --- a/packages/boba/bundler/src/BundlerServer.ts +++ b/packages/boba/bundler/src/BundlerServer.ts @@ -180,18 +180,16 @@ export class BundlerServer { // this uses custom errors that will work post bedrock. for now they need to be handled via wrapper // https://github.com/bobanetwork/boba/issues/752 case 'eth_estimateUserOperationGas': - // result = await this.methodHandler.estimateUserOperationGas( - // params[0], - // params[1] - // ) - //break - // remove after https://github.com/bobanetwork/boba/issues/752 - throw new RpcError(`Method ${method} is not supported`, -32601) + result = await this.methodHandler.estimateUserOperationGas( + params[0], + params[1] + ) + break case 'eth_getUserOperationReceipt': - result = await this.methodHandler.getUserOperationReceipt(params[0]) + result = await this.methodHandler.getUserOperationReceipt(params[0], params[1]) break case 'eth_getUserOperationByHash': - result = await this.methodHandler.getUserOperationByHash(params[0]) + result = await this.methodHandler.getUserOperationByHash(params[0], params[1]) break case 'web3_clientVersion': result = this.methodHandler.clientVersion() diff --git a/packages/boba/bundler/src/UserOpMethodHandler.ts b/packages/boba/bundler/src/UserOpMethodHandler.ts index 26874a38ad..02dc6ed66f 100644 --- a/packages/boba/bundler/src/UserOpMethodHandler.ts +++ b/packages/boba/bundler/src/UserOpMethodHandler.ts @@ -135,7 +135,6 @@ export class UserOpMethodHandler { /** * eth_estimateUserOperationGas RPC api. - * TODO: gonna work post bedrock! * @param userOp1 * @param entryPointInput */ @@ -156,22 +155,25 @@ export class UserOpMethodHandler { // todo: checks the existence of parameters, but since we hexlify the inputs, it fails to validate await this._validateParameters(deepHexlify(userOp), entryPointInput) // todo: validation manager duplicate? - const errorResult = await this.entryPoint.callStatic + const errorResult = await this.entryPointWrapper.callStatic .simulateValidation(userOp) .catch((e) => e) - if (errorResult.errorName === 'FailedOp') { + + const failedOp = errorResult[0] + const resp = errorResult[1] + const errorName = resp[0] + + if (failedOp.status) { throw new RpcError( - errorResult.errorArgs.at(-1), + failedOp?.reason, ValidationErrors.SimulateValidation ) } - // todo throw valid rpc error - if (errorResult.errorName !== 'ValidationResult') { - throw errorResult + if (errorName !== 'ValidationResult') { + throw resp } - const { returnInfo } = errorResult.errorArgs - let { preOpGas, validAfter, validUntil } = returnInfo + let { preOpGas, validAfter, validUntil } = resp[1] const callGasLimit = await this.provider .estimateGas({ @@ -225,11 +227,14 @@ export class UserOpMethodHandler { } async _getUserOperationEvent( - userOpHash: string + userOpHash: string, + opts?: any ): Promise { // TODO: eth_getLogs is throttled. must be acceptable for finding a UserOperation by hash const event = await this.entryPoint.queryFilter( - this.entryPoint.filters.UserOperationEvent(userOpHash) + this.entryPoint.filters.UserOperationEvent(userOpHash), + opts?.fromBlock, + opts?.toBlock ) return event[0] } @@ -267,14 +272,15 @@ export class UserOpMethodHandler { } async getUserOperationByHash( - userOpHash: string + userOpHash: string, + opts?: any ): Promise { requireCond( userOpHash?.toString()?.match(HEX_REGEX) != null, 'Missing/invalid userOpHash', -32601 ) - const event = await this._getUserOperationEvent(userOpHash) + const event = await this._getUserOperationEvent(userOpHash, opts) if (event == null) { return null } @@ -332,14 +338,15 @@ export class UserOpMethodHandler { } async getUserOperationReceipt( - userOpHash: string + userOpHash: string, + opts?: any ): Promise { requireCond( userOpHash?.toString()?.match(HEX_REGEX) != null, 'Missing/invalid userOpHash', -32601 ) - const event = await this._getUserOperationEvent(userOpHash) + const event = await this._getUserOperationEvent(userOpHash, opts) if (event == null) { return null } diff --git a/packages/boba/bundler/src/modules/EventsManager.ts b/packages/boba/bundler/src/modules/EventsManager.ts index e19462bfca..64b0c5a25a 100644 --- a/packages/boba/bundler/src/modules/EventsManager.ts +++ b/packages/boba/bundler/src/modules/EventsManager.ts @@ -7,6 +7,7 @@ import { ReputationManager } from './ReputationManager' import { EntryPoint } from '@boba/accountabstraction' import Debug from 'debug' import { TypedEvent } from '@boba/accountabstraction/dist/types/common' +import { JsonRpcProvider } from '@ethersproject/providers' import { MempoolManager } from './MempoolManager' const debug = Debug('aa.events') @@ -15,13 +16,21 @@ const debug = Debug('aa.events') * listen to events. trigger ReputationManager's Included */ export class EventsManager { + provider: JsonRpcProvider lastBlock = 0 + chunkSize = 5000 constructor( readonly entryPoint: EntryPoint, readonly mempoolManager: MempoolManager, - readonly reputationManager: ReputationManager - ) {} + readonly reputationManager: ReputationManager, + readonly l2Offset: number, + readonly logsChunkSize: number + ) { + this.provider = entryPoint.provider as JsonRpcProvider + this.lastBlock = l2Offset + this.chunkSize = logsChunkSize > 0 ? logsChunkSize : 1 + } /** * automatically listen to all UserOperationEvent events @@ -40,9 +49,26 @@ export class EventsManager { * process all new events since last run */ async handlePastEvents(): Promise { + let startBlock = this.lastBlock + const currentBlock = await this.provider.getBlockNumber() + if (currentBlock > startBlock + this.chunkSize) { + while (startBlock + this.chunkSize < currentBlock) { + const events = await this.entryPoint.queryFilter( + { address: this.entryPoint.address }, + startBlock, + startBlock + (this.chunkSize - 1) + ) + for (const ev of events) { + this.handleEvent(ev) + } + startBlock = startBlock + this.chunkSize + } + this.lastBlock = startBlock + } const events = await this.entryPoint.queryFilter( { address: this.entryPoint.address }, - this.lastBlock + this.lastBlock, + currentBlock ) for (const ev of events) { this.handleEvent(ev) diff --git a/packages/boba/bundler/src/modules/initServer.ts b/packages/boba/bundler/src/modules/initServer.ts index 12cf99f512..8b9b78cd98 100644 --- a/packages/boba/bundler/src/modules/initServer.ts +++ b/packages/boba/bundler/src/modules/initServer.ts @@ -23,7 +23,7 @@ export function initServer (config: BundlerConfig, signer: Signer): [ExecutionMa const reputationManager = new ReputationManager(BundlerReputationParams, parseEther(config.minStake), config.minUnstakeDelay) const mempoolManager = new MempoolManager(reputationManager) const validationManager = new ValidationManager(entryPoint, reputationManager, config.unsafe, entryPointWrapper) - const eventsManager = new EventsManager(entryPoint, mempoolManager, reputationManager) + const eventsManager = new EventsManager(entryPoint, mempoolManager, reputationManager, config.l2Offset, config.logsChunkSize) const bundleManager = new BundleManager(entryPoint, eventsManager, mempoolManager, validationManager, reputationManager, config.beneficiary, parseEther(config.minBalance), config.maxBundleGas, config.conditionalRpc, false, entryPointWrapper) const executionManager = new ExecutionManager(reputationManager, mempoolManager, bundleManager, validationManager) diff --git a/packages/boba/bundler/src/runBundler.ts b/packages/boba/bundler/src/runBundler.ts index 0ab13236a9..13ee3b94fd 100644 --- a/packages/boba/bundler/src/runBundler.ts +++ b/packages/boba/bundler/src/runBundler.ts @@ -120,6 +120,8 @@ export async function runBundler( .option('--l1NodeWeb3Url ', 'L1 network url for Address Manager', '') .option('--maxBundleGas ', 'Max Bundle Gas available to use', '5000000') .option('--enableDebugMethods', 'debug_* methods available', false) + .option('--l2Offset ', 'l2 Offset to start from') + .option('--logsChunkSize ', 'eth_getLogs range supported by network') const programOpts = program.parse(argv).opts() showStackTraces = programOpts.showStackTraces diff --git a/packages/boba/bundler/test/UserOpMethodHandler.test.ts b/packages/boba/bundler/test/UserOpMethodHandler.test.ts index 9281191a7d..a7f05bc71a 100644 --- a/packages/boba/bundler/test/UserOpMethodHandler.test.ts +++ b/packages/boba/bundler/test/UserOpMethodHandler.test.ts @@ -89,7 +89,8 @@ describe('UserOpMethodHandler', function () { provider, signer, config, - entryPoint + entryPoint, + entryPointWrapper, ) }) diff --git a/packages/boba/bundler_sdk/README.md b/packages/boba/bundler_sdk/README.md index 009a0af8f1..17bc011bc7 100644 --- a/packages/boba/bundler_sdk/README.md +++ b/packages/boba/bundler_sdk/README.md @@ -5,6 +5,10 @@ This package provides 2 APIs for using UserOperations: - Low-level "walletAPI" - High-level Provider +## Documentation +You can find more documentation about Boba, the Bundler SDK, etc. here: +- [Official Boba Documentation](https://docs.boba.network/for-developers) +- [Official NPM Package](https://www.npmjs.com/package/@bobanetwork/bundler_sdk) ## LowLevel API: diff --git a/packages/boba/bundler_sdk/package.json b/packages/boba/bundler_sdk/package.json index cacf22790a..bdf9874b27 100644 --- a/packages/boba/bundler_sdk/package.json +++ b/packages/boba/bundler_sdk/package.json @@ -1,7 +1,26 @@ { "name": "@bobanetwork/bundler_sdk", - "version": "0.2.3", + "version": "0.3.1", "main": "./dist/index.js", + "keywords": [ + "boba", + "account abstraction", + "bundler", + "sdk", + "smart wallets", + "web3", + "solidity", + "ethereum", + "smart", + "contracts", + "account-abstraction", + "eip-4337" + ], + "repository": "https://github.com/bobanetwork/boba/tree/develop/packages/boba/bundler_sdk", + "homepage": "https://boba.network", + "bugs": { + "url": "https://github.com/bobanetwork/issues" + }, "license": "MIT", "files": [ "dist/src", @@ -19,9 +38,9 @@ "watch-tsc": "tsc -w --preserveWatchOutput" }, "dependencies": { - "@ethersproject/abi": "^5.7.0", "@boba/accountabstraction": "^1.0.0", "@boba/bundler_utils": "^0.2.3", + "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/networks": "^5.7.0", @@ -33,14 +52,14 @@ "hardhat-gas-reporter": "^1.0.8" }, "devDependencies": { - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/mocha": "^9.1.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-network-helpers": "^1.0.8", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.2", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/mocha": "^9.1.0", "chai": "^4.3.6", "hardhat": "^2.12.5", "solidity-coverage": "^0.7.21", diff --git a/packages/boba/contracts/.env.example b/packages/boba/contracts/.env.example index b5d2e52945..99b089fe8a 100644 --- a/packages/boba/contracts/.env.example +++ b/packages/boba/contracts/.env.example @@ -1,7 +1,7 @@ -# Rinkeby -NETWORK=rinkeby -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/YOUR_INFURA_KEY_HERE -L2_NODE_WEB3_URL=https://rinkeby.boba.network +# Goerli +NETWORK=goerli +L1_NODE_WEB3_URL=goerli.gateway.tenderly.co +L2_NODE_WEB3_URL=https://goerli.boba.network ADDRESS_MANAGER_ADDRESS=0x927b167526bAbB9be047421db732C663a0b77B11 DEPLOYER_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 FAST_RELAYER_PRIVATE_KEY=0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 diff --git a/packages/boba/contracts/hardhat.config.ts b/packages/boba/contracts/hardhat.config.ts index 5205909c60..d9a5db1620 100644 --- a/packages/boba/contracts/hardhat.config.ts +++ b/packages/boba/contracts/hardhat.config.ts @@ -52,6 +52,9 @@ const config: HardhatUserConfig = { bobabeam: { url: 'https://bobabeam.boba.network', }, + moonbase: { + url: 'https://rpc.testnet.moonbeam.network', + }, bobabase: { url: 'https://bobabase.boba.network', }, @@ -61,6 +64,9 @@ const config: HardhatUserConfig = { bobaavax: { url: 'https://avax.boba.network', }, + avaxTestnet: { + url: 'https://api.avax-test.network/ext/bc/C/rpc', + }, bobaavaxTestnet: { url: 'https://testnet.avax.boba.network', }, @@ -70,6 +76,9 @@ const config: HardhatUserConfig = { bobabnb: { url: 'https://bnb.boba.network', }, + bnbTestnet: { + url: 'https://data-seed-prebsc-2-s3.binance.org:8545', + }, bobabnbTestnet: { url: 'https://testnet.bnb.boba.network', }, @@ -79,6 +88,9 @@ const config: HardhatUserConfig = { bobaopera: { url: 'https://bobaopera.boba.network', }, + fantomTestnet: { + url: 'https://rpc.testnet.fantom.network', + }, bobaoperaTestnet: { url: 'https://testnet.bobaopera.boba.network', }, @@ -147,15 +159,19 @@ const config: HardhatUserConfig = { 'boba-goerli': process.env.BOBA_MAINNET_KEY, moonbeam: process.env.MOONBEAM_KEY, bobabeam: 'DEFAULT_KEY', + moonbase: process.env.MOONBEAM_KEY, bobabase: 'DEFAULT_KEY', bnb: process.env.BSCSCAN_KEY, bobabnb: 'DEFAULT_KEY', + bnbTestnet: process.env.BSCSCAN_KEY, bobabnbTestnet: 'DEFAULT_KEY', snowtrace: process.env.SNOWTRACE_KEY, bobaavax: 'DEFAULT_KEY', + avaxTestnet: process.env.SNOWTRACE_KEY, bobaavaxTestnet: 'DEFAULT_KEY', fantom: process.env.FTMSCAN_KEY, bobaopera: 'DEFAULT_KEY', + fantomTestnet: process.env.FTMSCAN_KEY, bobaoperaTestnet: 'DEFAULT_KEY', }, customChains: [ @@ -191,6 +207,14 @@ const config: HardhatUserConfig = { browserURL: 'https://blockexplorer.bobabeam.boba.network', }, }, + { + network: 'moonbase', + chainId: 1287, + urls: { + apiURL: 'https://api-moonbase.moonscan.io/api', + browserURL: 'https://moonbase.moonscan.io/', + }, + }, { network: 'bobabase', chainId: 1297, @@ -215,6 +239,14 @@ const config: HardhatUserConfig = { browserURL: 'https://blockexplorer.avax.boba.network', }, }, + { + network: 'avaxTestnet', + chainId: 43113, + urls: { + apiURL: 'https://api-testnet.snowtrace.io/api', + browserURL: 'https://testnet.snowtrace.io', + }, + }, { network: 'bobaavaxTestnet', chainId: 4328, @@ -239,6 +271,14 @@ const config: HardhatUserConfig = { browserURL: 'https://blockexplorer.bnb.boba.network', }, }, + { + network: 'bnbTestnet', + chainId: 97, + urls: { + apiURL: 'https://api-testnet.bscscan.com/api', + browserURL: 'https://testnet.bscscan.com/', + }, + }, { network: 'bobabnbTestnet', chainId: 9728, @@ -263,6 +303,14 @@ const config: HardhatUserConfig = { browserURL: 'https://blockexplorer.bobaopera.boba.network/', }, }, + { + network: 'fantomTestnet', + chainId: 4002, + urls: { + apiURL: 'https://api-testnet.ftmscan.com/api', + browserURL: 'https://testnet.ftmscan.com', + }, + }, { network: 'bobaoperaTestnet', chainId: 4051, diff --git a/packages/boba/gateway/.env.example b/packages/boba/gateway/.env.example index 5a750e1b42..b63f9cc849 100644 --- a/packages/boba/gateway/.env.example +++ b/packages/boba/gateway/.env.example @@ -27,6 +27,10 @@ REACT_APP_DISABLE_WALLETCONNECT=1 # 1 - TO SHOW ALERT 0 - TO HIDE ALERT REACT_APP_BOBA_BEAM_STATUS=1 +# to show fantom opera Alert, DEPOSIT METHODS +# 1 - TO SHOW ALERT 0 - TO HIDE ALERT +REACT_APP_BOBA_OPERA_STATUS=1=1 + # TO remove boba beam features from gateway # 1 - TO REMOVE moonbeam, boba beam support from gateway. REACT_APP_DISABLE_BOBA_BEAM=0 diff --git a/packages/boba/gateway/package.json b/packages/boba/gateway/package.json index ae479373c1..cac8122483 100644 --- a/packages/boba/gateway/package.json +++ b/packages/boba/gateway/package.json @@ -5,8 +5,6 @@ "scripts": { "audit-check": "audit-ci --moderate", "build:prod": "GENERATE_SOURCEMAP=false REACT_APP_ENV=prod react-scripts build", - "deploy:mainnet": "yarn build:prod && aws s3 rm s3://boba-gateway --recursive && aws s3 sync build s3://boba-gateway && aws s3 cp s3://boba-gateway/index.html s3://boba-gateway/index.html --metadata-directive REPLACE --cache-control max-age=0 --content-type text/html", - "deploy:onegateway": "yarn build:prod && aws s3 rm s3://boba-gateway-staging-gatewaybucket-14ro8dd9i4p31 --recursive && aws s3 sync build s3://boba-gateway-staging-gatewaybucket-14ro8dd9i4p31 && aws s3 cp s3://boba-gateway-staging-gatewaybucket-14ro8dd9i4p31/index.html s3://boba-gateway-staging-gatewaybucket-14ro8dd9i4p31/index.html --metadata-directive REPLACE --cache-control max-age=0 --content-type text/html", "format:check": "prettier --config .prettierrc.json --check \"./src/**/*.{ts,tsx}\"", "format:fix": "prettier --config .prettierrc.json --write \"./src/**/*.{ts,tsx}\"", "get_artifacts": "./scripts/get_all_artifacts.sh", diff --git a/packages/boba/gateway/src/actions/createAction.js b/packages/boba/gateway/src/actions/createAction.js index b9bb7e5b48..6b99479d67 100644 --- a/packages/boba/gateway/src/actions/createAction.js +++ b/packages/boba/gateway/src/actions/createAction.js @@ -55,7 +55,8 @@ export function createAction (key, asyncAction) { // provide more information in special cases // MetaMask user rejected sig - throw up a banner if ((response.code === 4001 || - response.hasOwnProperty('reason')) && response?.reason?.includes('user rejected transaction') + response.hasOwnProperty('reason')) + && response?.reason?.includes('user rejected transaction') ) { console.log("MetaMask: user denied signature") errorMessage = 'MetaMask: Transaction was rejected by user - signature denied' diff --git a/packages/boba/gateway/src/components/notificationBanner/bannerConfig.ts b/packages/boba/gateway/src/components/notificationBanner/bannerConfig.ts new file mode 100644 index 0000000000..821414e624 --- /dev/null +++ b/packages/boba/gateway/src/components/notificationBanner/bannerConfig.ts @@ -0,0 +1,17 @@ +import { NETWORK } from 'util/network/network.util' + +interface BannerContent { + message?: string + content?: string +} + +export const BannerConfig: Record = { + [NETWORK.MOONBEAM]: { + message: `Bobabeam is being wound down & will no longer be available, starting May 25th`, + content: `Bobabeam is being wound down & will no longer be available, starting May 25th. For users of Bobabeam or Bobabeam applications you will need to transfer all your funds to Moonbeam mainnet before May 15th or risk permanently losing access to any assets on Bobabeam.`, + }, + [NETWORK.FANTOM]: { + message: `BobaOpera is being wound down & will no longer be available, starting June 25th`, + content: `BobaOpera is being wound down & will no longer be available starting June 25th. For users of BobaOpera or BobaOpera applications you will need to transfer all your funds to Fantom mainnet before June 15th or risk permanently losing access to any assets on BobaOpera.`, + }, +} diff --git a/packages/boba/gateway/src/components/notificationBanner/index.tsx b/packages/boba/gateway/src/components/notificationBanner/index.tsx index eaa7972549..a9ecc22e95 100644 --- a/packages/boba/gateway/src/components/notificationBanner/index.tsx +++ b/packages/boba/gateway/src/components/notificationBanner/index.tsx @@ -1,6 +1,8 @@ import React, { ReactNode, useState } from 'react' import styled from 'styled-components' -import CloseIcon from 'components/icons/CloseIcon' +import { BannerConfig } from './bannerConfig' +import { selectActiveNetwork } from 'selectors' +import { useSelector } from 'react-redux' // @style const NotificationBannerContainer = styled('div')` @@ -47,21 +49,6 @@ const NotificationBannerMessage = styled.div` } ` -const NotificationBannerCloseIcon = styled.div` - position: absolute; - top: 50%; - right: 32px; - transform: translate(0, -50%); - line-height: 0; - cursor: pointer; - opacity: 0.4; - display: block; - - svg path { - fill: white; - } -` - const ReadMoreLess = styled.span` cursor: pointer; opacity: 0.65; @@ -71,40 +58,41 @@ const ReadMoreLess = styled.span` // @inteface interface NotificationBannerProps { - message?: string - content?: string - open?: boolean children?: ReactNode - onClose?: (() => void) | null } // @component const NotificationBanner: React.FC = ({ - message, - content, - open = false, children, - onClose = null, }: NotificationBannerProps) => { const [readMore, setReadMore] = useState(false) + const activeNetwork = useSelector(selectActiveNetwork()) + + const bannerContent = BannerConfig[activeNetwork] + + if (!bannerContent) { + return <> + } + return ( - {message ? (readMore ? content : message) : children} - {content && ( + {bannerContent + ? readMore + ? bannerContent.content + : bannerContent.message + : children} + {bannerContent.content && ( setReadMore(!readMore)}> {`Read ${!readMore ? 'more' : 'less'}`} )} - {onClose !== null && ( - - - - )} ) } diff --git a/packages/boba/gateway/src/components/notificationBanner/tests/__snapshots__/index.test.tsx.snap b/packages/boba/gateway/src/components/notificationBanner/tests/__snapshots__/index.test.tsx.snap index 396b258be0..158d312ce6 100644 --- a/packages/boba/gateway/src/components/notificationBanner/tests/__snapshots__/index.test.tsx.snap +++ b/packages/boba/gateway/src/components/notificationBanner/tests/__snapshots__/index.test.tsx.snap @@ -36,6 +36,14 @@ exports[`NotificationBanner should match snapshot and check show banner when op opacity: 0.65; } +.c2 { + cursor: pointer; + opacity: 0.65; + -webkit-text-decoration: underline; + text-decoration: underline; + color: inherit; +} + @media (max-width :1024px) { .c0 { padding: 0 10px; @@ -60,7 +68,13 @@ exports[`NotificationBanner should match snapshot and check show banner when op class="c1" data-testid="message" > - Mock test message data! + BobaOpera is being wound down & will no longer be available, starting June 25th + + Read more + @@ -102,6 +116,14 @@ exports[`NotificationBanner should match snapshot without message 1`] = ` opacity: 0.65; } +.c2 { + cursor: pointer; + opacity: 0.65; + -webkit-text-decoration: underline; + text-decoration: underline; + color: inherit; +} + @media (max-width :1024px) { .c0 { padding: 0 10px; @@ -120,12 +142,20 @@ exports[`NotificationBanner should match snapshot without message 1`] = ` }
+ > + BobaOpera is being wound down & will no longer be available, starting June 25th + + Read more + +
`; diff --git a/packages/boba/gateway/src/components/notificationBanner/tests/index.test.tsx b/packages/boba/gateway/src/components/notificationBanner/tests/index.test.tsx index 8b9261a076..f626472e0b 100644 --- a/packages/boba/gateway/src/components/notificationBanner/tests/index.test.tsx +++ b/packages/boba/gateway/src/components/notificationBanner/tests/index.test.tsx @@ -4,11 +4,10 @@ import { render, screen, fireEvent } from '@testing-library/react' import Theme from 'themes' import { Provider } from 'react-redux' import configureStore from 'redux-mock-store' +import { NETWORK, NETWORK_TYPE } from 'util/network/network.util' +import { BannerConfig } from '../bannerConfig' -const data = { - message: 'Mock test message data!', - content: 'Mock test message content goes here!', -} +const data = BannerConfig[NETWORK.FANTOM] const mockStore = configureStore() @@ -19,6 +18,10 @@ const renderBanner = (props: any) => { ui: { theme: 'dark', }, + network: { + activeNetwork: NETWORK.FANTOM, + activeNetworkType: NETWORK_TYPE.MAINNET, + }, })} > diff --git a/packages/boba/gateway/src/containers/home/Home.js b/packages/boba/gateway/src/containers/home/Home.js index f7d7272b55..e7f7d12e54 100644 --- a/packages/boba/gateway/src/containers/home/Home.js +++ b/packages/boba/gateway/src/containers/home/Home.js @@ -257,15 +257,7 @@ function Home() { {!!CDMCompletionModalState && } {!!switchNetworkModalState && } - { - !!Number(BOBABEAM_STATUS) - && activeNetwork === 'MOONBEAM' - && } + @@ -343,7 +334,6 @@ function Home() { diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/BridgeAlert.tsx b/packages/boba/gateway/src/containers/modals/deposit/steps/BridgeAlert.tsx new file mode 100644 index 0000000000..8bd3f2f819 --- /dev/null +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/BridgeAlert.tsx @@ -0,0 +1,28 @@ +import { Text } from 'components/global/text' +import React from 'react' +import { useSelector } from 'react-redux' +import { selectActiveNetwork } from 'selectors' +import styled from 'styled-components' +import { BOBABEAM_STATUS, BOBAOPERA_STATUS } from 'util/constant' +import { bridgeAlerts } from './alertConfig' + +const AlertText = styled(Text)` + color: ${(props) => props.theme.warning}; + font-size: 16px; + font-weight: 700; + margin: 5px 0px; +` + +const BridgeAlert = () => { + const activeNetwork = useSelector(selectActiveNetwork()) + + const alertCaption = bridgeAlerts[activeNetwork] + + if (!!Number(BOBABEAM_STATUS) || !!Number(BOBAOPERA_STATUS)) { + return {alertCaption} + } + + return <> +} + +export default BridgeAlert diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js index 7ef0adf274..3f4f22f5e1 100644 --- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js @@ -18,7 +18,7 @@ import { WrapperActionsModal } from 'components/modal/Modal.styles' import BN from 'bignumber.js' import { ethers } from 'ethers' -import BobaBeamAlert from './bobaBeamAlert' +import BridgeAlert from './BridgeAlert' function InputStep({ handleClose, token, isBridge, openTokenPicker }) { @@ -106,8 +106,8 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) { //no token in this account return ( - - + + Sorry, nothing to deposit - no {token.symbol} in this wallet @@ -127,7 +127,7 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) { return ( <> - + {!isBridge && Classic Bridge {token && token.symbol ? token.symbol : ''} to L2 diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js index 4e482a2bb3..d5eacd5e2c 100644 --- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js @@ -63,7 +63,7 @@ import { fetchL2LPLiquidity, } from 'actions/balanceAction' -import BobaBeamAlert from './bobaBeamAlert' +import BridgeAlert from './BridgeAlert' function InputStepFast({ handleClose, token, isBridge, openTokenPicker }) { @@ -295,7 +295,7 @@ function InputStepFast({ handleClose, token, isBridge, openTokenPicker }) { //no token in this account return ( - + - + {!isBridge && ( Fast Bridge to L2 diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/alertConfig.ts b/packages/boba/gateway/src/containers/modals/deposit/steps/alertConfig.ts new file mode 100644 index 0000000000..82c1a824f8 --- /dev/null +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/alertConfig.ts @@ -0,0 +1,10 @@ +import { NETWORK } from 'util/network/network.util' + +export const bridgeAlerts = { + [NETWORK.MOONBEAM]: `For users of Bobabeam or Bobabeam applications + you will need to transfer all your funds to Moonbeam mainnet before May + 15th or risk permanently losing access to any assets on Bobabeam`, + [NETWORK.FANTOM]: `For users of BobaOpera or BobaOpera applications + you will need to transfer all your funds to Fantom mainnet before June 15th + or risk permanently losing access to any assets on BobaOpera`, +} diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/bobaBeamAlert.tsx b/packages/boba/gateway/src/containers/modals/deposit/steps/bobaBeamAlert.tsx deleted file mode 100644 index 8e9aaa11e0..0000000000 --- a/packages/boba/gateway/src/containers/modals/deposit/steps/bobaBeamAlert.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Text } from 'components/global/text' -import React from 'react' -import { useSelector } from 'react-redux' -import { selectActiveNetwork } from 'selectors' -import styled from 'styled-components' -import { BOBABEAM_STATUS } from 'util/constant' -import { NETWORK } from 'util/network/network.util' - -const AlertText = styled(Text)` - color: ${(props) => props.theme.warning}; - font-size: 16px; - font-weight: 700; - margin-bottom: 5px; -` - -const BobaBeamAlert = () => { - const activeNetwork = useSelector(selectActiveNetwork()) - - if (!!Number(BOBABEAM_STATUS) && activeNetwork === NETWORK.MOONBEAM) { - return ( - - For users of Bobabeam or Bobabeam applications you will need to transfer - all your funds to Moonbeam mainnet before May 15th or risk permanently - losing access to any assets on Bobabeam - - ) - } - - return <> -} - -export default BobaBeamAlert diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/tests/__snapshots__/bobaBeamAlert.test.tsx.snap b/packages/boba/gateway/src/containers/modals/deposit/steps/tests/__snapshots__/bobaBeamAlert.test.tsx.snap index 2b96e0c191..29438781f8 100644 --- a/packages/boba/gateway/src/containers/modals/deposit/steps/tests/__snapshots__/bobaBeamAlert.test.tsx.snap +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/tests/__snapshots__/bobaBeamAlert.test.tsx.snap @@ -1,6 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`BobaBeamAlert should match the snapshot when active network is ethereum 1`] = ``; +exports[`BobaBeamAlert should match the snapshot disabled from env params 1`] = ``; + +exports[`BobaBeamAlert should match the snapshot when active network is ethereum 1`] = ` + + .c0 { + padding: 0px; + margin: 0px; + font-weight: 400; + font-size: 0.9rem; + line-height: 1.25; +} + +.c1 { + color: yellow; + font-size: 16px; + font-weight: 700; + margin: 5px 0px; +} + +

+ +`; exports[`BobaBeamAlert should match the snapshot when active network is moonbeam 1`] = ` @@ -16,15 +39,42 @@ exports[`BobaBeamAlert should match the snapshot when active network is moonbeam color: yellow; font-size: 16px; font-weight: 700; - margin-bottom: 5px; + margin: 5px 0px; }

- For users of Bobabeam or Bobabeam applications you will need to transfer all your funds to Moonbeam mainnet before May 15th or risk permanently losing access to any assets on Bobabeam + For users of Bobabeam or Bobabeam applications + you will need to transfer all your funds to Moonbeam mainnet before May + 15th or risk permanently losing access to any assets on Bobabeam

`; -exports[`BobaBeamAlert should match the snapshot when active network is moonbeam and status is 0 1`] = ``; +exports[`BobaBeamAlert should match the snapshot when active network is opera 1`] = ` + + .c0 { + padding: 0px; + margin: 0px; + font-weight: 400; + font-size: 0.9rem; + line-height: 1.25; +} + +.c1 { + color: yellow; + font-size: 16px; + font-weight: 700; + margin: 5px 0px; +} + +

+ For users of BobaOpera or BobaOpera applications + you will need to transfer all your funds to Fantom mainnet before June 15th + or risk permanently losing access to any assets on BobaOpera +

+
+`; diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/tests/bobaBeamAlert.test.tsx b/packages/boba/gateway/src/containers/modals/deposit/steps/tests/bobaBeamAlert.test.tsx index eb021590f2..ec2e73d2a5 100644 --- a/packages/boba/gateway/src/containers/modals/deposit/steps/tests/bobaBeamAlert.test.tsx +++ b/packages/boba/gateway/src/containers/modals/deposit/steps/tests/bobaBeamAlert.test.tsx @@ -3,7 +3,7 @@ import { render } from '@testing-library/react' import Theme from 'themes' import { Provider } from 'react-redux' import configureStore from 'redux-mock-store' -import BobaBeamAlert from '../bobaBeamAlert' +import BobaBeamAlert from '../BridgeAlert' import { NETWORK } from 'util/network/network.util' import * as constants from 'util/constant' @@ -32,6 +32,10 @@ describe('BobaBeamAlert', () => { value: 1, writable: true, }) + Object.defineProperty(constants, 'BOBAOPERA_STATUS', { + value: 1, + writable: true, + }) const { asFragment } = renderComponent({ network: { activeNetwork: NETWORK.ETHEREUM, @@ -45,6 +49,10 @@ describe('BobaBeamAlert', () => { value: 1, writable: true, }) + Object.defineProperty(constants, 'BOBAOPERA_STATUS', { + value: 1, + writable: true, + }) const { asFragment } = renderComponent({ network: { activeNetwork: NETWORK.MOONBEAM, @@ -53,14 +61,35 @@ describe('BobaBeamAlert', () => { expect(asFragment()).toMatchSnapshot() }) - test('should match the snapshot when active network is moonbeam and status is 0', () => { + test('should match the snapshot when active network is opera', () => { + Object.defineProperty(constants, 'BOBABEAM_STATUS', { + value: 1, + writable: true, + }) + Object.defineProperty(constants, 'BOBAOPERA_STATUS', { + value: 1, + writable: true, + }) + const { asFragment } = renderComponent({ + network: { + activeNetwork: NETWORK.FANTOM, + }, + }) + expect(asFragment()).toMatchSnapshot() + }) + + test('should match the snapshot disabled from env params', () => { Object.defineProperty(constants, 'BOBABEAM_STATUS', { value: 0, writable: true, }) + Object.defineProperty(constants, 'BOBAOPERA_STATUS', { + value: 0, + writable: true, + }) const { asFragment } = renderComponent({ network: { - activeNetwork: NETWORK.MOONBEAM, + activeNetwork: NETWORK.FANTOM, }, }) expect(asFragment()).toMatchSnapshot() diff --git a/packages/boba/gateway/src/containers/wallet/Wallet.js b/packages/boba/gateway/src/containers/wallet/Wallet.js index c769627e45..f1ef65749e 100644 --- a/packages/boba/gateway/src/containers/wallet/Wallet.js +++ b/packages/boba/gateway/src/containers/wallet/Wallet.js @@ -19,8 +19,8 @@ import * as G from '../Global.styles' import { setConnectETH, setConnectBOBA } from 'actions/setupAction' -import { - selectAccountEnabled, +import { + selectAccountEnabled, selectLayer, selectlayer2Balance, selectActiveNetwork, @@ -114,6 +114,19 @@ function Wallet() { } } + const alertContent = () => { + if (NETWORK.ETHEREUM === network) { + return `Using BOBA requires a minimum ETH balance (of 0.002 ETH) regardless of your fee setting, + otherwise MetaMask may incorrectly reject transactions. If you ran out of ETH, use EMERGENCY SWAP to swap BOBA + for 0.005 ETH at market rates.` + } else { + return `Using ${networkService.L1NativeTokenSymbol} requires a minimum BOBA + balance (of 1 BOBA) regardless of your fee setting, otherwise + MetaMask may incorrectly reject transactions. If you ran out of + BOBA, use EMERGENCY SWAP to swap ${networkService.L1NativeTokenSymbol} for 1 BOBA at market rates.` + } + } + return ( @@ -132,11 +145,7 @@ function Wallet() { ml={2} style={{ opacity: '0.6' }} > - Using {networkService.L1NativeTokenSymbol} requires a minimum BOBA - balance (of 1 BOBA) regardless of your fee setting, otherwise - MetaMask may incorrectly reject transactions. If you ran out of - BOBA, use EMERGENCY SWAP to swap{' '} - {networkService.L1NativeTokenSymbol} for 1 BOBA at market rates. + {alertContent()}
diff --git a/packages/boba/gateway/src/util/constant.ts b/packages/boba/gateway/src/util/constant.ts index 46d9242edd..323d50808c 100644 --- a/packages/boba/gateway/src/util/constant.ts +++ b/packages/boba/gateway/src/util/constant.ts @@ -30,6 +30,8 @@ export const DISABLE_WALLETCONNECT: EnvType = process.env.REACT_APP_DISABLE_WALLETCONNECT export const BOBABEAM_STATUS: EnvType = process.env.REACT_APP_BOBA_BEAM_STATUS || 0 +export const BOBAOPERA_STATUS: EnvType = + process.env.REACT_APP_BOBA_OPERA_STATUS || 0 type BridgeType = { FAST_BRIDGE: string diff --git a/packages/boba/gateway/src/util/network/config/ethereum.js b/packages/boba/gateway/src/util/network/config/ethereum.js index adc51029a6..b5f572d060 100644 --- a/packages/boba/gateway/src/util/network/config/ethereum.js +++ b/packages/boba/gateway/src/util/network/config/ethereum.js @@ -13,6 +13,7 @@ export const ethereumConfig = { chainIdHex: '0x5', rpcUrl: [ `https://goerli.infura.io/v3/${INFURA_ID}`, + `https://goerli.gateway.tenderly.co`, `https://rpc.ankr.com/eth_goerli`, ], transaction: `https://goerli.etherscan.io/tx/`, @@ -61,6 +62,7 @@ export const ethereumConfig = { rpcUrl: [ `https://mainnet.infura.io/v3/${INFURA_ID}`, `https://rpc.ankr.com/eth`, + `http://gateway.tenderly.co/public/boba-ethereum`, `https://cloudflare-eth.com`, ], transaction: ` https://etherscan.io/tx/`, diff --git a/packages/boba/register/README.md b/packages/boba/register/README.md index c83c156fb8..392493fe18 100644 --- a/packages/boba/register/README.md +++ b/packages/boba/register/README.md @@ -33,7 +33,7 @@ $ docker-compose up -V ``` -Create a `.env` file in the root directory of the contracts folder. Add environment-specific variables on new lines in the form of `NAME=VALUE`. Examples are given in the `.env.example` file. Just pick which net you want to work on and copy either the "Rinkeby" _or_ the "Local" envs to your `.env`. +Create a `.env` file in the root directory of the contracts folder. Add environment-specific variables on new lines in the form of `NAME=VALUE`. Examples are given in the `.env.example` file. Just pick which net you want to work on and copy either the "Goerli" _or_ the "Local" envs to your `.env`. ```bash diff --git a/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json b/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json index 96aec34e3a..5729da4ad1 100644 --- a/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json +++ b/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json @@ -11,8 +11,8 @@ "TK_L2MTT": "0xb3BE5C928E3ec6b11985753f7B3C43A8bB12Bc03", "L1CrossDomainMessengerFast": "0xf5a68fC4734a657652717aCC024fAb390274C0E6", "Proxy__L1CrossDomainMessengerFast": "0xbbD6a271abcC44f6dE284E6051Da76b4fB57458C", - "L2LiquidityPool": "0x8e449c8267cbe89e0615F6ea8FBf885B5755F90D", - "L1LiquidityPool": "0x026fCac45B06395f626c5e6698444B0B51bC7B43", + "L2LiquidityPool": "0xA68179E9b332F236ce3B7CEB919D6d1ab71d381D", + "L1LiquidityPool": "0x14797AD30590ae6F6d5d4fDe36AAf69900665420", "Proxy__L1LiquidityPool": "0xed142c7BdA2A3d5b08Eae78C96b37FFe60Fecf80", "Proxy__L2LiquidityPool": "0xa1786aDDe89d62014CC50bE01d53c16C7A80D460", "L2TokenPool": "0x14718bB320d6FC2681EF86864732211a9A0928dD", @@ -21,8 +21,8 @@ "AtomicSwap": "0x37FB8bB9EA100CA9a0DE822c9923643ef48Cb8EE", "L2ERC721": "0x81cF4cBEDF5602401178862f0225b93D2deB2E28", "L2ERC721Reg": "0x6737867ddd04272a79E7207a008f213e336b00e1", - "L1NFTBridge": "0x347cCB98f420E0E7fbeEd4808732b21C1C86db59", - "L2NFTBridge": "0x3de30b620bA8A44423F70c42f9ed973541d11B12", + "L1NFTBridge": "0x6eB147e1e8A16c05a4E60A41c6A3BB931f9DdaA3", + "L2NFTBridge": "0xB06cD0df19c13D1Ec6c0f77df3eA11299a70DE2E", "Proxy__L1NFTBridge": "0x4c3f621d01c22658F711c70a12662ECDfCA5916A", "Proxy__L2NFTBridge": "0x6fA80303E479Ea2d705F4f241Ef162aA2F793e71", "L1MultiMessageRelayerFast": "0x0F01394F5fc19bA1B9F669bA79b76c9EaAe37987", @@ -37,5 +37,11 @@ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "AuthenticatedFaucet": "0x4Bee9fE15Ff3645A85792607ce4Eee14ab9E9E02", "WBOBA9": "0xb743f3A682C846ccC4584bd8bCb434320a769216", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x0Da288Fe17678c4474649BfD011889C17Fbc5450", + "L2ERC1155Bridge": "0x06de75EF5d9ea3B3D0A3E48F5D093b1A22331709", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x14cD766f245e804A0D7CFC6FC85796491d5B709E", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json b/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json index 55f2b20fb5..f72f6cb058 100644 --- a/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json +++ b/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json @@ -8,8 +8,8 @@ "TK_L2AVAX": "0x4200000000000000000000000000000000000023", "L1CrossDomainMessengerFast": "0x3C6B8493047b44754EF57129d43d151040871bb7", "Proxy__L1CrossDomainMessengerFast": "0xBc5249095c890F58C0b75795bd21667eFd123F5F", - "L2LiquidityPool": "0xC5a27088fF840Abc3057C0B5f8B98511033c4867", - "L1LiquidityPool": "0x7BD3DC4aB8087840aB702eb6689d57a60e2143e4", + "L2LiquidityPool": "0x99411339aB22441D6D5f49Ae63deE8c47db85D49", + "L1LiquidityPool": "0x58DbD9819BBB9356dB109d4Ff186BF2aed57dA93", "Proxy__L1LiquidityPool": "0x30caB2fCA6260FB91B172D4AFB215514069868ea", "Proxy__L2LiquidityPool": "0x9198b3f5C6acCf05dF8847766A68d992355c18c4", "L2TokenPool": "0x5edFE3970732EA7878b6e17c1b7Cf27EcF108bC4", @@ -18,8 +18,8 @@ "AtomicSwap": "0x5565f730cab69977E89F21de35f355F2F9fEB1C5", "L2ERC721": "0xBdBF3b9803DDc910a77bF4852a283Edc055457e5", "L2ERC721Reg": "0xb1f74c5A3c0cE11d1EB20c03393cc0234254C315", - "L1NFTBridge": "0x8C3E97fdF162615e9e928b4a69b0CB8A738A1910", - "L2NFTBridge": "0xAe34F89F7549903EF99A1cAc77649EA310cC5AAA", + "L1NFTBridge": "0xc7A1ba4bFdA4091803ee7a37B6bd66D87dFbd505", + "L2NFTBridge": "0x345281294Bb6c7Bc9B7eBFB70eeda80A6Cf5dDAF", "Proxy__L1NFTBridge": "0xA7A1415eC63Bf410b27AcDAF42fC3c63756E2bFc", "Proxy__L2NFTBridge": "0x2e59D69cA439b3ab0c1AD8b2762377Afb5C71C7B", "L1MultiMessageRelayerFast": "0x5e6B412b4fA8373a17aD85B269fA5c354ea57e63", @@ -34,5 +34,11 @@ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "AuthenticatedFaucet": "0x5f6D019832FA4522DB7b94A4fe0DDBb73212FAcE", "WBOBA9": "0xA7cad1B188Ac7E4d05644D1cf1cBcEB4aD372a9D", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x6ece353E618C6dDaE8BAB1F8e27921E8763CC0fA", + "L2ERC1155Bridge": "0x02Ee265a5e6d486B4405A5cbbdB875Eb57Fe41dc", + "Proxy__L1L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x2001F1B2b72000C34a630a58861E1b5CDe1f63eb", + "Proxy__TeleportationAddress": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json b/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json index 9e9c941eff..c7cbd82e51 100644 --- a/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json +++ b/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json @@ -10,8 +10,8 @@ "TK_L2GLMR": "0x4200000000000000000000000000000000000023", "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1", "Proxy__L1CrossDomainMessengerFast": "0xAE8885D3b7937af9480cd7301925a88Dfb0cE9f6", - "L2LiquidityPool": "0xEb0d3b107528FE17b9F55360D03351fe3D0ACaB2", - "L1LiquidityPool": "0xd779D5e0aDA790f382Cd80d0a90De533b8262b9f", + "L2LiquidityPool": "0x8D4B01Dd2868F388823c12Edce3dec65c22826ce", + "L1LiquidityPool": "0xf17727d61b93078427D9F381bc87C0F76e03124a", "Proxy__L1LiquidityPool": "0x569a3e1A4A50D0F53BDF05d50D5FeAB3f716f5A1", "Proxy__L2LiquidityPool": "0xb227a9FebBa59B8Fe5dF7Ad81afac6E7CdE5a4A5", "L2TokenPool": "0x152eE45C2eF3E6B303d0603C82b785255D386Fd0", @@ -20,8 +20,8 @@ "AtomicSwap": "0x2e965d49E69dA6182bdc331b740384CF8745A690", "L2ERC721": "0x3a93df8eba34AFa4Fb74a09D7cb9BB6E528d2E0C", "L2ERC721Reg": "0xb73Bc7AbED40236ca53b2225e3FA497c04A0F718", - "L1NFTBridge": "0xf5aCb091936715eCAC49d5759b4801703a175387", - "L2NFTBridge": "0x64371C6b9acFDBC14A98CD794a531Ff737Ef0F98", + "L1NFTBridge": "0x3ddBca089BCAf1eF7ef5517c8887d3B2261F1292", + "L2NFTBridge": "0x59e8281F47D4E5B5Dfc2463313B8C5AF654a38b2", "Proxy__L1NFTBridge": "0x1E12Ba552Ac35351563091737910d9E5d1DaD17a", "Proxy__L2NFTBridge": "0x8E65834B52c3aCc79206a0F09c4b627BC588f09e", "L1MultiMessageRelayerFast": "0x874a7Ea9722b96924e186f0263866FA90a7C777b", @@ -36,5 +36,11 @@ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "AuthenticatedFaucet": "0x8b6A1c0590Ab8A9CED9ADa87Df485eCdd97886E2", "WBOBA9": "0xc03cc0d0995e7b677348e396F5F1D70Fe8667fCe", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x72F86F1c4157E367354C3E3aEfEf6Af1a6F1Dd6e", + "L2ERC1155Bridge": "0x9f4f7f4E80fc02ecB9C0cE20C8f8a9A5C589A1A9", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0x92F4E3796324b916A69c98c96bBd939af19C4AD2", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json b/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json index 8f8ddb8e05..81c5a92f26 100644 --- a/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json +++ b/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json @@ -8,8 +8,8 @@ "TK_L2FTM": "0x4200000000000000000000000000000000000023", "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1", "Proxy__L1CrossDomainMessengerFast": "0xE5781E5E9CbC67E91DF93eD01E922De30125e491", - "L2LiquidityPool": "0x00Fda9B3952f80c4238C371064FA6667b6146468", - "L1LiquidityPool": "0x6A27b80a11156A7aA88CF34EC73F130df4f28bED", + "L2LiquidityPool": "0xB9CeA621C2C9BE002747F2DdB7eB6a7dd0F8F20E", + "L1LiquidityPool": "0x0481480cf9f3a245aEB5f5c10360577Bb8949e40", "Proxy__L1LiquidityPool": "0x34024168ba3cfa608005b5E9f13389bb2532422A", "Proxy__L2LiquidityPool": "0xE7Da2a8EBcbBa0Dc6082B8D0faBAcA0176920760", "L2TokenPool": "0x352d964E9aD016f122dc78Afa5164417907E0FaF", @@ -18,8 +18,8 @@ "AtomicSwap": "0x1bc8Bd8FCAd96ee663b6325F71F818Cce678083D", "L2ERC721": "0x727207c505c1D95Ef7Ed93f74443D72C155064E7", "L2ERC721Reg": "0xb5F92c9d10539137C9602A626d7F98823e58f3aA", - "L1NFTBridge": "0xA3f17f06F7F02156692D795a1782105dA530631c", - "L2NFTBridge": "0xEecAD665ca933eeA4a9a2db600E538c1391930d1", + "L1NFTBridge": "0x621EdB64bC5bD6c088c969a8A7d7Eb1168E4F95D", + "L2NFTBridge": "0x30C18d90a6f9B161b8c0BB720b31BcF215FEc12b", "Proxy__L1NFTBridge": "0x5E52f340D43Ee819dd8a38D55Cc27293603Ac5fb", "Proxy__L2NFTBridge": "0x310FA48450dF21fBC99b937a7AafBc3B7Af6f6D1", "L1MultiMessageRelayerFast": "0x9Af237336C29dCbA346764af8e8E1F0ba83D1eE5", @@ -34,5 +34,11 @@ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "AuthenticatedFaucet": "0xCED1459C6B56a85363426a502a24De99fBbF5a83", "WBOBA9": "0xfd7f8a9F2D11B30a3571395Be9601720B6a32995", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L1ERC1155Bridge": "0x5c94ea55c8dC4aB27faDc18068d335006460DAe3", + "L2ERC1155Bridge": "0x0f5c544D2671F008D73C7c27654DbA58A4248604", + "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", + "Teleportation": "0xb34918D9C16e13e10Fa078C6CB6a9AE7a42FcAB3", + "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF" } diff --git a/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json b/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json index c99780a37a..0475727d67 100644 --- a/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json +++ b/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json @@ -22,8 +22,8 @@ "TK_L2xBOBA": "0x01c9DC8B9c66D61a56Db7bF3F5303Cd9E9c85B1F", "L1CrossDomainMessengerFast": "0x93f605b2f42d0380E35E50671153fbB8f0A1d257", "Proxy__L1CrossDomainMessengerFast": "0x8b5A2d6aE932e8224B15c2C87dc8A972301c1B5d", - "L2LiquidityPool": "0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148", - "L1LiquidityPool": "0x847bBdA8aE752d236D373aA1D0F9014c0787bFed", + "L2LiquidityPool": "0x3eF7f0bc313C1BdDB587d97207faA7Aef4b69484", + "L1LiquidityPool": "0xeAD5916eEd8c197e7122c42e693E576C51D74475", "Proxy__L1LiquidityPool": "0x1F32017A84dE07A524b9C6993D35B4bF70e8Dc93", "Proxy__L2LiquidityPool": "0xF121Fd008A17c8C76DF1f003f19523130060B5BA", "L2TokenPool": "0xc00933D40Cc84139075acf332f575CFB3846D408", @@ -32,8 +32,8 @@ "AtomicSwap": "0x8B0eF5250b5d6EfA877eAc15BBdfbD3C8069242F", "L2ERC721": "0x4CFeADc728fD25F2d88b23F3C3834a103330D9A1", "L2ERC721Reg": "0x7Bb4cfa36F9F3880e18a46B74bBb9B334F6600F3", - "L1NFTBridge": "0x126301CCbdd780Cd129e47594938FB17B3Da43DE", - "L2NFTBridge": "0xBd026eefc80c90ABe8A537F18D4071e9cec46510", + "L1NFTBridge": "0xcF904C33aF3e6246361fDAf5b87aED35F9A4E1ca", + "L2NFTBridge": "0x47bB313d73E5133faf7BEd67eE1c3DBB70456DB5", "Proxy__L1NFTBridge": "0xa2232D3c81EFd46815c1adf48Ed86C5C377cb6e2", "Proxy__L2NFTBridge": "0xF84979ADeb8D2Dd25f54cF8cBbB05C08eC188e11", "L1MultiMessageRelayerFast": "0xf3b489cCC93A9B74F17113E323E4Db2b1FdE2Cb8", @@ -50,11 +50,11 @@ "BobaTuringCredit": "0x4200000000000000000000000000000000000021", "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020", "Proxy__L1ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", - "L1ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "L1ERC1155Bridge": "0x1b3af95A5a1CD6Cee43dA9fc2f7ed2Beb4235076", "Proxy__L2ERC1155Bridge": "0x1dF39152AC0e81aB100341cACC4dE4c372A550cb", - "L2ERC1155Bridge": "0xCc982d33525EBFB14B9c504428d02082043817D7", + "L2ERC1155Bridge": "0x6444860D2837eD831B0711bfA407Ede32B7cbe84", "Proxy__Teleportation": "0xd68809330075C792C171C450B983F4D18128e9BF", - "Teleportation": "0x35789652C1166323596466A315f82722D1173336", + "Teleportation": "0x5e29dadEC77cDcA1Fd8fE672831e6264Cc077f62", "BobaMonsters": "0x240D31b369B4F5494fF6F04237B3E93bE52fAcb8", "Timelock": "0x66C893019bC366eB497f49c8Df79e63AF73124eA", "GovernorBravoDelegate": "0x22FDcc02fBBF24d829F7A0A69329d8d27477b0Df", @@ -68,5 +68,6 @@ "AuthenticatedFaucet": "0x4E98bAbe5364452cD02FC8E0AD7d9E526B68a5D6", "AggregatorHCHepler": "0x45c5dB3F5AC1579DD43404e47562641b61A6AC77", "Proxy__ETHUSD_AggregatorHC": "0x9e28dE704435871af476460B456Ec741fE5DE24f", - "ETHUSD_AggregatorHC": "0x300f35972189d5FbEe140E552Dac80df85E6521C" + "ETHUSD_AggregatorHC": "0x300f35972189d5FbEe140E552Dac80df85E6521C", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", } diff --git a/packages/boba/register/bin/deploy.ts b/packages/boba/register/bin/deploy.ts index fdd33677dd..e526238fd1 100644 --- a/packages/boba/register/bin/deploy.ts +++ b/packages/boba/register/bin/deploy.ts @@ -10,7 +10,7 @@ import { sleep, hexStringEquals } from '@eth-optimism/core-utils' require('dotenv').config() import hre from 'hardhat' -import toRegister from '../addresses/addressesRinkeby_0x93A96D6A5beb1F661cf052722A1424CDDA3e9418.json' +import toRegister from '../addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json' const waitUntilTrue = async ( check: () => Promise, diff --git a/packages/boba/subgraph/L1/bridges/package.json b/packages/boba/subgraph/L1/bridges/package.json index c8748a65ff..d8b561ac58 100644 --- a/packages/boba/subgraph/L1/bridges/package.json +++ b/packages/boba/subgraph/L1/bridges/package.json @@ -4,9 +4,9 @@ "scripts": { "codegen": "graph codegen", "build": "graph build", - "prepare:rinkeby": "mustache config/rinkeby.json subgraph.template.yaml > subgraph.yaml", + "prepare:goerli": "mustache config/goerli.json subgraph.template.yaml > subgraph.yaml", "prepare:mainnet": "mustache config/mainnet.json subgraph.template.yaml > subgraph.yaml", - "deploy:subgraph:rinkeby": "graph deploy --studio boba-network-rinkeby", + "deploy:subgraph:goerli": "graph deploy --studio boba-network-goerli", "deploy:subgraph:mainnet": "graph deploy --studio boba-network-mainnet" }, "devDependencies": { @@ -22,4 +22,4 @@ "truffle-contract": "^4.0.5", "truffle-hdwallet-provider": "^1.0.4" } -} \ No newline at end of file +} diff --git a/packages/boba/subgraph/L1/bridges/truffle.js b/packages/boba/subgraph/L1/bridges/truffle.js index e569b9662e..53eb841af1 100644 --- a/packages/boba/subgraph/L1/bridges/truffle.js +++ b/packages/boba/subgraph/L1/bridges/truffle.js @@ -9,11 +9,11 @@ module.exports = { port: 8545, network_id: '*', }, - ropsten: { + goerli: { provider: function() { return new HDWalletProvider( process.env.MNEMONIC, - `https://ropsten.infura.io/v3/${process.env.ROPSTEN_INFURA_API_KEY}` + `https://goerli.gateway.tenderly.co` ) }, network_id: '3', diff --git a/packages/boba/subgraph/L2/config/rinkeby.json b/packages/boba/subgraph/L2/config/goerli.json similarity index 100% rename from packages/boba/subgraph/L2/config/rinkeby.json rename to packages/boba/subgraph/L2/config/goerli.json diff --git a/packages/boba/subgraph/L2/package.json b/packages/boba/subgraph/L2/package.json index b75705b765..d5114f06a6 100644 --- a/packages/boba/subgraph/L2/package.json +++ b/packages/boba/subgraph/L2/package.json @@ -4,10 +4,10 @@ "scripts": { "codegen": "graph codegen", "build": "graph build", - "prepare:rinkeby": "mustache config/rinkeby.json subgraph.template.yaml > subgraph.yaml", + "prepare:goerli": "mustache config/goerli.json subgraph.template.yaml > subgraph.yaml", "prepare:mainnet": "mustache config/mainnet.json subgraph.template.yaml > subgraph.yaml", - "create:subgraph:rinkeby": "graph create --node https://graph.rinkeby.boba.network:8020 boba/Bridges", - "deploy:subgraph:rinkeby": "graph deploy boba/Bridges --ipfs https://graph.rinkeby.boba.network:5001 --node https://graph.rinkeby.boba.network:8020", + "create:subgraph:goerli": "graph create --node https://graph.goerli.boba.network:8020 boba/Bridges", + "deploy:subgraph:goerli": "graph deploy boba/Bridges --ipfs https://graph.goerli.boba.network:5001 --node https://graph.goerli.boba.network:8020", "deploy:subgraph:mainnet": "graph deploy --product hosted-service BOBANETWORK/boba-l2-subgraph" }, "devDependencies": { diff --git a/packages/boba/subgraph/L2/truffle.js b/packages/boba/subgraph/L2/truffle.js index e569b9662e..53eb841af1 100644 --- a/packages/boba/subgraph/L2/truffle.js +++ b/packages/boba/subgraph/L2/truffle.js @@ -9,11 +9,11 @@ module.exports = { port: 8545, network_id: '*', }, - ropsten: { + goerli: { provider: function() { return new HDWalletProvider( process.env.MNEMONIC, - `https://ropsten.infura.io/v3/${process.env.ROPSTEN_INFURA_API_KEY}` + `https://goerli.gateway.tenderly.co` ) }, network_id: '3', diff --git a/packages/boba/subgraph/README.md b/packages/boba/subgraph/README.md index c7bf9038e3..232895488b 100644 --- a/packages/boba/subgraph/README.md +++ b/packages/boba/subgraph/README.md @@ -13,7 +13,7 @@ yarn global add --dev @graphprotocol/graph-ts ## Building & Running -First, `cd` to either the **L1** or the **L2** folders, depending on where you will be deploying your subgraphs to. There are four subgraphs: Ethereum, Boba, Rinkeby, and Boba-Rinkeby. A deploy key or access token is required to deploy subgraphs. Depending on which chain you are indexing, provide either `mainnet` or `rinkeby` as a setting to `yarn prepare:`. +First, `cd` to either the **L1** or the **L2** folders, depending on where you will be deploying your subgraphs to. There are four subgraphs: Ethereum, Boba, Goerli, and Boba-Goerli. A deploy key or access token is required to deploy subgraphs. Depending on which chain you are indexing, provide either `mainnet` or `goerli` as a setting to `yarn prepare:`. ### L1 Subgraphs @@ -24,12 +24,12 @@ graph auth --product hosted-service # or, graph auth --studio $DEPLOY_KEY cd L1 yarn install -yarn prepare:mainnet -# or, yarn prepare:rinkeby +yarn prepare:mainnet +# or, yarn prepare:goerli yarn codegen yarn build -graph deploy --product hosted-service BOBANETWORK/boba-l2-subgraph -# or, graph deploy --studio boba-network-rinkeby +graph deploy --product hosted-service BOBANETWORK/boba-l2-subgraph +# or, graph deploy --studio boba-network-goerli ``` ### L2 Subgraphs @@ -42,11 +42,11 @@ graph auth --product hosted-service cd L2 yarn install yarn prepare:mainnet -# or, yarn prepare:rinkeby +# or, yarn prepare:goerli yarn codegen yarn build graph deploy --product hosted-service BOBANETWORK/boba-l2-subgraph -# or, yarn deploy:subgraph:rinkeby +# or, yarn deploy:subgraph:goerli ``` *NOTE: When you log into https://thegraph.com/hosted-service/dashboard, you may have more than one account. Make sure that you are using the ACCESS_TOKEN associated with the correct account, otherwise your depoyment will fail. You can cycle through your multiple accounts by clicking on your GitHub user ID or whatever other account is displayed next to your user Avatar.* @@ -66,12 +66,12 @@ Here is some example queries to get you started: ``` ```bash -# L2 Boba Rinkeby Query +# L2 Boba Goerli Query curl -g -X POST \ -H "Content-Type: application/json" \ -d '{"query":"{ governorProposalCreateds {proposalId values description proposer}}"}' \ - https://graph.rinkeby.boba.network/subgraphs/name/boba/Bridges + https://graph.goerli.boba.network/subgraphs/name/boba/Bridges ``` @@ -79,11 +79,11 @@ Here is some example queries to get you started: * The Mainnet Graph Node is hosted by **The Graph**. Visit https://thegraph.com/hosted-service/ to deploy your subgraphs. You can experiment here: [ bobanetwork/boba-l2-subgraph](https://thegraph.com/hosted-service/subgraph/bobanetwork/boba-l2-subgraph?query=Example%20query). -* Rinkeby endpoint: https://graph.rinkeby.boba.network. You can experiment here: [boba/Bridges/graphql](https://graph.rinkeby.boba.network/subgraphs/name/boba/Bridges/graphql) +* Goerli endpoint: https://graph.goerli.boba.network. You can experiment here: [boba/Bridges/graphql](https://graph.goerli.boba.network/subgraphs/name/boba/Bridges/graphql) | **Port** | **Purpose** | **Routes** | URL | **Permission** | | -------- | ----------------------------------------- | ----------------------- | ------------------------------------------------------------ | -------------- | -| 8000 | GraphQL HTTP server | /subgraphs/name/.../... | https://graph.rinkeby.boba.network
https://graph.rinkeby.boba.network:8000 | Public | -| 8020 | JSON-RPC
(for managing deployments) | / | https://graph.rinkeby.boba.network:8020 | Private | -| 8030 | Subgraph indexing status API | /graphql | https://graph.rinkeby.boba.network:8030 | Public | -| 8040 | Prometheus metrics | /metrics | https://graph.rinkeby.boba.network:8040 | Public | +| 8000 | GraphQL HTTP server | /subgraphs/name/.../... | https://graph.goerli.boba.network
https://graph.goerli.boba.network:8000 | Public | +| 8020 | JSON-RPC
(for managing deployments) | / | https://graph.goerli.boba.network:8020 | Private | +| 8030 | Subgraph indexing status API | /graphql | https://graph.goerli.boba.network:8030 | Public | +| 8040 | Prometheus metrics | /metrics | https://graph.goerli.boba.network:8040 | Public | diff --git a/packages/boba/turing/README.md b/packages/boba/turing/README.md index 0edb676fa2..5433dbcc04 100644 --- a/packages/boba/turing/README.md +++ b/packages/boba/turing/README.md @@ -89,14 +89,14 @@ Then, register and fund your Turing Credit account: You can use Turing as a pipe to any other computer, such as APIs for social networks, weather and location data, or market data. Please keep in mind however that Turing differs sharply from established providers of market trading data, in particular, since **Turing does not provide a decentralized mechanism to verify the accuracy of the data**. **You should therefore not use Turing for production trading or lending use, but should use proven, decentralized data oracles**. -**Data/Oracle best practices** Regardless of your specific use case, minimally, you will need to secure your pipe/contract against data outliers, temporary lack of data, and malicious attempts to distort the data. For example, you could average over multiple on-chain oracles and/or off-chain sources - in this case, the role of Turing could be to 'augment' or separately estimate the reliability and timeliness of on-chain oracles. +**Data/Oracle best practices** Regardless of your specific use case, minimally, you will need to secure your pipe/contract against data outliers, temporary lack of data, and malicious attempts to distort the data. For example, you could average over multiple on-chain oracles and/or off-chain sources - in this case, the role of Turing could be to 'augment' or separately estimate the reliability and timeliness of on-chain oracles. **Note - Boba does not provide endpoints for you** You are responsible for setting up an endpoint that Turing can access - read on for more information and example code. Assume you have an API access key to a provider of weather data. First, set up a server or endpoint that queries this API, and stores and analyzes the data, if needed. Your own server/endpoint contains your secrets and API access keys. Next, add a simple interface to allow Turing to interact with your server. Turing calls to your server contain the address of the calling contract and there are multiple ways to control access to your server in very granular manner, if desired. See `.packages/boba/turing/AWS_code/turing_oracle.py` for a copy-paste example for querying data APIs via a wrapper at AWS Lambda: ```python /AWS_code/turing_oracle.py -# Note - This code is running on YOUR server +# Note - This code is running on YOUR server ... api_key = 'YOUR_API_KEY' # Insert your API key here @@ -189,13 +189,13 @@ $ cd packages/boba/turing $ yarn test:local ``` -**Note: Testing on Rinkeby** +**Note: Testing on Goerli** -To test on Rinkeby, you need a private key with both ETH and BOBA on the Boba L2; the private key needs to be provided in `hardhat.config.js`. Just replace all the zeros with your key: +To test on Goerli, you need a private key with both ETH and BOBA on the Boba L2; the private key needs to be provided in `hardhat.config.js`. Just replace all the zeros with your key: ```javascript - boba_rinkeby: { - url: 'https://rinkeby.boba.network', + boba_goerli: { + url: 'https://goerli.boba.network', accounts: ['0x0000000000000000000000000000000000000000000000000000000000000000'] }, ``` @@ -204,7 +204,7 @@ Then, run: ```bash $ cd packages/boba/turing -$ yarn test:rinkeby +$ yarn test:goerli ``` The tests will perform some basic floating point math, provide some random numbers, and get the latest BTC-USD exchange rate: diff --git a/packages/boba/turing/hardhat.config.ts b/packages/boba/turing/hardhat.config.ts index 6afb1db633..0521bbd3e9 100644 --- a/packages/boba/turing/hardhat.config.ts +++ b/packages/boba/turing/hardhat.config.ts @@ -12,8 +12,8 @@ const config: HardhatUserConfig = { url: 'http://localhost:8545', accounts: ['0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'] }, - boba_rinkeby: { - url: 'https://rinkeby.boba.network', + boba_goerli: { + url: 'https://goerli.boba.network', accounts: ['0x0000000000000000000000000000000000000000000000000000000000000000'] }, boba_mainnet: { @@ -41,4 +41,4 @@ const config: HardhatUserConfig = { }, } -export default config \ No newline at end of file +export default config diff --git a/packages/boba/ve-boba/veDao_changes/deploy/013-BobaDao.deploy.ts b/packages/boba/ve-boba/veDao_changes/deploy/013-BobaDao.deploy.ts index cfabb90303..c0e4d29f61 100644 --- a/packages/boba/ve-boba/veDao_changes/deploy/013-BobaDao.deploy.ts +++ b/packages/boba/ve-boba/veDao_changes/deploy/013-BobaDao.deploy.ts @@ -52,7 +52,7 @@ const deployFn: DeployFunction = async (hre) => { governor_voting_delay = 172800 // 2 days governor_proposal_threshold = utils.parseEther('50000') } else { - // set config for local/rinkeby + // set config for local/goerli delay_before_execute_s = 0 eta_delay_s = 5 governor_voting_period = 259200 // 3 days in seconds @@ -184,7 +184,7 @@ const deployFn: DeployFunction = async (hre) => { console.log('Queue Initiate...') // call initiate() to complete setAdmin - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta2 = (await getTimestamp(hre)) + eta_delay_s const initiateData = utils.defaultAbiCoder.encode( @@ -207,7 +207,7 @@ const deployFn: DeployFunction = async (hre) => { console.log(`Time transaction was made: ${await getTimestamp(hre)}`) console.log(`Time at which transaction can be executed: ${eta2}`) - // if it's local/rinkeby attempt to execute transactions + // if it's local/goerli attempt to execute transactions if (process.env.NETWORK !== 'mainnet') { console.log('Execute setPendingAdmin...') // Execute the transaction that will set the admin of Timelock to the GovernorBravoDelegator contract @@ -263,7 +263,7 @@ const deployFn: DeployFunction = async (hre) => { } const setPendingAdmin = async (hre, eta_delay_s) => { - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta1 = (await getTimestamp(hre)) + eta_delay_s const setPendingAdminData = utils.defaultAbiCoder.encode( diff --git a/packages/boba/ve-boba/veDao_changes/integration-tests/pool_dao_actions.spec.ts b/packages/boba/ve-boba/veDao_changes/integration-tests/pool_dao_actions.spec.ts index cb78af5f46..b6d4e45caf 100644 --- a/packages/boba/ve-boba/veDao_changes/integration-tests/pool_dao_actions.spec.ts +++ b/packages/boba/ve-boba/veDao_changes/integration-tests/pool_dao_actions.spec.ts @@ -141,7 +141,7 @@ describe('Dao Action Test', async () => { await GovernorBravoDelegator.deployTransaction.wait() // set admin Timelock - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta1 = (await getTimestamp()) + eta_delay_s const setPendingAdminData = utils.defaultAbiCoder.encode( @@ -160,7 +160,7 @@ describe('Dao Action Test', async () => { await setPendingAdminTx.wait() // call initiate() to complete setAdmin - // set eta to be the current timestamp for local and rinkeby + // set eta to be the current timestamp for local and goerli const eta2 = (await getTimestamp()) + eta_delay_s const initiateData = utils.defaultAbiCoder.encode( diff --git a/packages/data-transport-layer/src/services/l1-ingestion/service.ts b/packages/data-transport-layer/src/services/l1-ingestion/service.ts index b4192f6589..147f3d2205 100644 --- a/packages/data-transport-layer/src/services/l1-ingestion/service.ts +++ b/packages/data-transport-layer/src/services/l1-ingestion/service.ts @@ -97,10 +97,10 @@ const optionSettings = { } export class L1IngestionService extends BaseService { - constructor(options: L1IngestionServiceOptions) { + constructor(options: L1IngestionServiceOptions, _addrList: any) { super('L1_Ingestion_Service', options, optionSettings) + this.state.addrList = _addrList } - private l1IngestionMetrics: L1IngestionMetrics private state: { @@ -108,6 +108,7 @@ export class L1IngestionService extends BaseService { contracts: OptimismContracts l1RpcProvider: BaseProvider startingL1BlockNumber: number + addrList: any } = {} as any protected async _init(): Promise { @@ -485,6 +486,12 @@ export class L1IngestionService extends BaseService { this.state.startingL1BlockNumber, blockNumber ) + } else if (contractName in this.state.addrList) { + /* Workaround to avoid expensive queries for deployments where + the contract address has not changed, and the addrList value + can be assumed to be correct. + */ + return this.state.addrList[contractName] } else { events = await this.state.contracts.Lib_AddressManager.queryFilter( this.state.contracts.Lib_AddressManager.filters.AddressSet( diff --git a/packages/data-transport-layer/src/services/main/service.ts b/packages/data-transport-layer/src/services/main/service.ts index fad4c2a5e3..d390629c48 100644 --- a/packages/data-transport-layer/src/services/main/service.ts +++ b/packages/data-transport-layer/src/services/main/service.ts @@ -107,9 +107,9 @@ export class L1DataTransportService extends BaseService=3.0.0 <4.0.0" @@ -23722,14 +23689,15 @@ shellwords@^0.1.1: resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== +shiki@^0.14.1: + version "0.14.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.2.tgz#d51440800b701392b31ce2336036058e338247a1" + integrity sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A== dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" shx@^0.3.3: version "0.3.4" @@ -24738,10 +24706,10 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylis@4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== superagent@^8.0.5: version "8.0.6" @@ -25759,16 +25727,15 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typedoc@^0.22.13: - version "0.22.18" - resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz" - integrity sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA== +typedoc@^0.24.7: + version "0.24.7" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.7.tgz#7eeb272a1894b3789acc1a94b3f2ae8e7330ee39" + integrity sha512-zzfKDFIZADA+XRIp2rMzLe9xZ6pt12yQOhCr7cD7/PBTjhPmMyMvGrkZ2lPNJitg3Hj1SeiYFNzCsSDrlpxpKw== dependencies: - glob "^8.0.3" lunr "^2.3.9" - marked "^4.0.16" - minimatch "^5.1.0" - shiki "^0.10.1" + marked "^4.3.0" + minimatch "^9.0.0" + shiki "^0.14.1" typescript@^4.3.5, typescript@^4.9.3: version "4.9.4" @@ -25857,17 +25824,10 @@ underscore@^1.13.2: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== -undici@^5.14.0: - version "5.19.1" - resolved "https://registry.npmjs.org/undici/-/undici-5.19.1.tgz" - integrity sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A== - dependencies: - busboy "^1.6.0" - -undici@^5.4.0: - version "5.14.0" - resolved "https://registry.npmjs.org/undici/-/undici-5.14.0.tgz" - integrity sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ== +undici@^5.14.0, undici@^5.4.0: + version "5.22.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" + integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== dependencies: busboy "^1.6.0" @@ -26318,15 +26278,15 @@ vm-browserify@^1.0.1: resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vscode-oniguruma@^1.6.1: +vscode-oniguruma@^1.7.0: version "1.7.0" - resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== w3c-hr-time@^1.0.1: version "1.0.2"