diff --git a/.circleci/config.yml b/.circleci/config.yml index 9fdd9a9708fd..3845143b1185 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1532,12 +1532,6 @@ workflows: - contracts-bedrock-validate-spaces: requires: - pnpm-monorepo - - js-lint-test: - name: chain-mon-tests - package_name: chain-mon - dependencies: "(contracts-bedrock|sdk)" - requires: - - pnpm-monorepo - semgrep-scan - go-mod-download - fuzz-golang: @@ -1764,7 +1758,7 @@ workflows: type: approval filters: tags: - only: /^(da-server|chain-mon|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ + only: /^(da-server|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ branches: ignore: /.*/ - docker-build: @@ -1962,22 +1956,6 @@ workflows: op_component: op-supervisor requires: - op-supervisor-docker-release - - docker-build: - name: chain-mon-docker-release - filters: - tags: - only: /^chain-mon\/v.*/ - branches: - ignore: /.*/ - docker_name: chain-mon - docker_tags: <>,latest - publish: true - release: true - resource_class: xlarge - context: - - oplabs-gcr-release - requires: - - hold - docker-build: name: ci-builder-docker-release filters: @@ -2205,21 +2183,11 @@ workflows: op_component: op-supervisor requires: - op-supervisor-docker-publish - - docker-build: - name: chain-mon-docker-publish - docker_name: chain-mon - docker_tags: <>,<> - resource_class: xlarge - publish: true - context: - - oplabs-gcr - - slack - docker-build: name: contracts-bedrock-docker-publish docker_name: contracts-bedrock docker_tags: <>,<> resource_class: xlarge - requires: [ 'chain-mon-docker-publish' ] # use the cached base image publish: true context: - oplabs-gcr diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 91ae9af99425..2b10c56d812c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,6 +1,4 @@ # Packages -/packages/chain-mon @ethereum-optimism/security-reviewers -/packages/chain-mon/internal/balance-mon @ethereum-optimism/infra-reviewers /packages/contracts-bedrock @ethereum-optimism/contract-reviewers /packages/sdk @ethereum-optimism/devxpod diff --git a/.github/mergify.yml b/.github/mergify.yml index c95e05bfdace..53fa7701e084 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -195,14 +195,6 @@ pull_request_rules: label: add: - A-ops - - name: Add A-pkg-chain-mon label - conditions: - - 'files~=^packages/chain-mon/' - - '#label<5' - actions: - label: - add: - - A-pkg-chain-mon - name: Add A-pkg-contracts-bedrock label conditions: - 'files~=^packages/contracts-bedrock/' diff --git a/.github/workflows/tag-service.yml b/.github/workflows/tag-service.yml index 80390ef689e6..3bec832a4112 100644 --- a/.github/workflows/tag-service.yml +++ b/.github/workflows/tag-service.yml @@ -21,7 +21,6 @@ on: - ci-builder - ci-builder-rust - op-heartbeat - - chain-mon - op-node - op-batcher - op-proposer diff --git a/Makefile b/Makefile index 1f7f91667408..66a0b329b339 100644 --- a/Makefile +++ b/Makefile @@ -80,18 +80,6 @@ cross-op-node: op-node .PHONY: golang-docker -chain-mon-docker: - # We don't use a buildx builder here, and just load directly into regular docker, for convenience. - GIT_COMMIT=$$(git rev-parse HEAD) \ - GIT_DATE=$$(git show -s --format='%ct') \ - IMAGE_TAGS=$$(git rev-parse HEAD),latest \ - docker buildx bake \ - --progress plain \ - --load \ - -f docker-bake.hcl \ - chain-mon -.PHONY: chain-mon-docker - contracts-bedrock-docker: IMAGE_TAGS=$$(git rev-parse HEAD),latest \ docker buildx bake \ diff --git a/README.md b/README.md index 15d70b522077..10142dcad7a1 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,6 @@ The Optimism Immunefi program offers up to $2,000,042 for in-scope critical vuln ├── ops: Various operational packages ├── ops-bedrock: Bedrock devnet work ├── packages -│ ├── chain-mon: Chain monitoring services │ ├── contracts-bedrock: OP Stack smart contracts │ ├── devnet-tasks: Legacy Hardhat tasks used within devnet CI tests ├── proxyd: Configurable RPC request router and proxy @@ -116,7 +115,6 @@ See the [Node Software Releases](https://docs.optimism.io/builders/node-operator The full set of components that have releases are: -- `chain-mon` - `ci-builder` - `op-batcher` - `op-contracts` diff --git a/codecov.yml b/codecov.yml index e8e97e47304f..96b195edabf9 100644 --- a/codecov.yml +++ b/codecov.yml @@ -38,5 +38,4 @@ flag_management: target: 100% - name: bedrock-go-tests - name: contracts-tests - - name: chain-mon-tests - name: sdk-tests diff --git a/docker-bake.hcl b/docker-bake.hcl index c96164e765ce..42e46cb72138 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -216,21 +216,6 @@ target "cannon" { tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/cannon:${tag}"] } -target "chain-mon" { - dockerfile = "./ops/docker/Dockerfile.packages" - context = "." - args = { - // proxyd dockerfile has no _ in the args - GITCOMMIT = "${GIT_COMMIT}" - GITDATE = "${GIT_DATE}" - GITVERSION = "${GIT_VERSION}" - } - // this is a multi-stage build, where each stage is a possible output target, but wd-mon is all we publish - target = "wd-mon" - platforms = split(",", PLATFORMS) - tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/chain-mon:${tag}"] -} - target "ci-builder" { dockerfile = "./ops/docker/ci-builder/Dockerfile" context = "." diff --git a/ops/docker/Dockerfile.packages b/ops/docker/Dockerfile.packages index 224a748fc56c..58062d3af501 100644 --- a/ops/docker/Dockerfile.packages +++ b/ops/docker/Dockerfile.packages @@ -89,39 +89,6 @@ RUN pnpm build ENTRYPOINT ["pnpm", "run"] -FROM base as chain-mon -WORKDIR /opt/optimism/packages/chain-mon - -# TODO keeping the rest of these here for now because they are being used -# but we should really delete them we only need one image -FROM base as balance-mon -WORKDIR /opt/optimism/packages/chain-mon/internal -CMD ["start:balance-mon"] - -from base as fault-mon -WORKDIR /opt/optimism/packages/chain-mon/ -CMD ["start:fault-mon"] - -from base as multisig-mon -WORKDIR /opt/optimism/packages/internal/multisig-mon -CMD ["start:multisig-mon"] - -FROM base as replica-mon -WORKDIR /opt/optimism/packages/chain-mon/contrib -CMD ["start:replica-mon"] - -FROM base as wallet-mon -WORKDIR /opt/optimism/packages/chain-mon/contrib -CMD ["start:wallet-mon"] - -FROM base as wd-mon -WORKDIR /opt/optimism/packages/chain-mon/ -CMD ["start:wd-mon"] - -FROM base as faultproof-wd-mon -WORKDIR /opt/optimism/packages/chain-mon/ -CMD ["start:faultproof-wd-mon"] - FROM base as contracts-bedrock WORKDIR /opt/optimism/packages/contracts-bedrock CMD ["deploy"] diff --git a/ops/scripts/ci-docker-tag-op-stack-release.sh b/ops/scripts/ci-docker-tag-op-stack-release.sh index f743a20cbc41..49904d7cce9a 100755 --- a/ops/scripts/ci-docker-tag-op-stack-release.sh +++ b/ops/scripts/ci-docker-tag-op-stack-release.sh @@ -6,7 +6,7 @@ DOCKER_REPO=$1 GIT_TAG=$2 GIT_SHA=$3 -IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|chain-mon|da-server|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) +IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|da-server|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) if [ -z "$IMAGE_NAME" ]; then echo "image name could not be parsed from git tag '$GIT_TAG'" exit 1 diff --git a/ops/tag-service/tag-service.py b/ops/tag-service/tag-service.py index 319c997eb858..6cf8fdff0183 100755 --- a/ops/tag-service/tag-service.py +++ b/ops/tag-service/tag-service.py @@ -11,7 +11,6 @@ MIN_VERSIONS = { 'ci-builder': '0.6.0', 'ci-builder-rust': '0.1.0', - 'chain-mon': '0.2.2', 'da-server': '0.0.4', 'op-node': '0.10.14', 'op-batcher': '0.10.14', diff --git a/ops/tag-service/tag-tool.py b/ops/tag-service/tag-tool.py index 5da97d3cb924..08a8df922515 100644 --- a/ops/tag-service/tag-tool.py +++ b/ops/tag-service/tag-tool.py @@ -5,7 +5,6 @@ SERVICES = [ 'ci-builder', 'ci-builder-rust', - 'chain-mon', 'op-node', 'op-batcher', 'op-challenger', @@ -88,4 +87,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/packages/chain-mon/.depcheckrc b/packages/chain-mon/.depcheckrc deleted file mode 100644 index 3a691b778839..000000000000 --- a/packages/chain-mon/.depcheckrc +++ /dev/null @@ -1,13 +0,0 @@ -ignores: [ - "@babel/eslint-parser", - "@typescript-eslint/parser", - "eslint-plugin-import", - "eslint-plugin-unicorn", - "eslint-plugin-jsdoc", - "eslint-plugin-prefer-arrow", - "eslint-plugin-react", - "@typescript-eslint/eslint-plugin", - "eslint-config-prettier", - "eslint-plugin-prettier", - "chai" -] diff --git a/packages/chain-mon/.env.example b/packages/chain-mon/.env.example deleted file mode 100644 index 07fbfc985693..000000000000 --- a/packages/chain-mon/.env.example +++ /dev/null @@ -1,85 +0,0 @@ -############################################################################### -# ↓ balance-mon ↓ # -############################################################################### - -# RPC pointing to network to monitor balances on -BALANCE_MON__RPC= - -# JSON array in the format [{ "address":
, "nickname": }, ... ] -BALANCE_MON__ACCOUNTS= - - -############################################################################### -# ↓ multisig-mon ↓ # -############################################################################### - -# RPC pointing to network to monitor safe nonces on -MULTISIG_MON__RPC= - -# JSON array in the format [{ "address":
, "nickname": }, ... ] -MULTISIG_MON__ACCOUNTS= - - -############################################################################### -# ↓ wallet-mon ↓ # -############################################################################### - -# RPC pointing to network to monitor -WALLET_MON__RPC= - -# The block number to start monitoring from -# Defaults to the first bedrock block if unset. -WALLET_MON__START_BLOCK_NUMBER= - -############################################################################### -# ↓ wd-mon ↓ # -############################################################################### - -# RPCs pointing to a base chain and Optimism chain -TWO_STEP_MONITOR__L1_RPC_PROVIDER= -TWO_STEP_MONITOR__L2_RPC_PROVIDER= - -# The block number to start monitoring from -TWO_STEP_MONITOR__START_BLOCK_NUMBER= - -############################################################################### -# ↓ fault-mon ↓ # -############################################################################### - -# --l1rpcprovider Provider for interacting with L1 (env: FAULT_DETECTOR__L1_RPC_PROVIDER) -FAULT_DETECTOR__L1_RPC_PROVIDER= -# --l2rpcprovider Provider for interacting with L2 (env: FAULT_DETECTOR__L2_RPC_PROVIDER) -FAULT_DETECTOR__L2_RPC_PROVIDER= -# --bedrock Whether or not the service is running against a Bedrock chain (env: FAULT_DETECTOR__BEDROCK) -BEDROCK=true - -############################################################################### -# ↓ initialized-upgraded-mon ↓ # -############################################################################### - -# RPC pointing to network to monitor -INITIALIZED_UPGRADED_MON__RPC= - -# The block number to start monitoring from -# Defaults to the first bedrock block if unset. -INITIALIZED_UPGRADED_MON__START_BLOCK_NUMBER= - -# JSON array in the format [{ "label": , "address":
}, ... ] -INITIALIZED_UPGRADED_MON__CONTRACTS= - -# Optional Params - -# --startbatchindex Batch index to start checking from. For bedrock chains, this is the L2 height to start from (env: FAULT_DETECTOR__START_BATCH_INDEX) -# FAULT_DETECTOR__START_BATCH_INDEX= -# --optimismportaladdress [Custom Bedrock Chains] Deployed OptimismPortal contract address. Used to retrieve necessary info for output verification (env: FAULT_DETECTOR__OPTIMISM_PORTAL_ADDRESS) -# FAULT_DETECTOR__OPTIMISM_PORTAL_ADDRESS= -# --statecommitmentchainaddress [Custom Legacy Chains] Deployed StateCommitmentChain contract address. Used to fetch necessary info for output verification. (env: FAULT_DETECTOR__STATE_COMMITMENT_CHAIN_ADDRESS) -# FAULT_DETECTOR__STATE_COMMITMENT_CHAIN_ADDRESS= -# --loopintervalms Loop interval in milliseconds, only applies if service is set to loop (env: FAULT_DETECTOR__LOOP_INTERVAL_MS) -# FAULT_DETECTOR__LOOP_INTERVAL_MS= -# --port Port for the app server (env: FAULT_DETECTOR__PORT) -# FAULT_DETECTOR__PORT= -# --hostname Hostname for the app server (env: FAULT_DETECTOR__HOSTNAME) -# FAULT_DETECTOR__HOSTNAME= -# --loglevel Log level (env: FAULT_DETECTOR__LOG_LEVEL) -# FAULT_DETECTOR__LOG_LEVEL= diff --git a/packages/chain-mon/.eslintrc.js b/packages/chain-mon/.eslintrc.js deleted file mode 100644 index bfd2057be80b..000000000000 --- a/packages/chain-mon/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '../../.eslintrc.js', -} diff --git a/packages/chain-mon/.lintstagedrc.yml b/packages/chain-mon/.lintstagedrc.yml deleted file mode 100644 index a3035a2299b2..000000000000 --- a/packages/chain-mon/.lintstagedrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -"*.{ts,js}": - - eslint diff --git a/packages/chain-mon/.prettierrc.js b/packages/chain-mon/.prettierrc.js deleted file mode 100644 index 6b3fa8e2ce23..000000000000 --- a/packages/chain-mon/.prettierrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - ...require('../../.prettierrc.js'), -}; \ No newline at end of file diff --git a/packages/chain-mon/CHANGELOG.md b/packages/chain-mon/CHANGELOG.md deleted file mode 100644 index 5aecd49ce32f..000000000000 --- a/packages/chain-mon/CHANGELOG.md +++ /dev/null @@ -1,603 +0,0 @@ -# @eth-optimism/drippie-mon - -## 0.6.6 - -### Patch Changes - -- Updated dependencies [[`eb454ac72b26211eb8037e7e777315c8f30d994d`](https://github.com/ethereum-optimism/optimism/commit/eb454ac72b26211eb8037e7e777315c8f30d994d)]: - - @eth-optimism/contracts-bedrock@0.17.3 - -## 0.6.5 - -### Patch Changes - -- Updated dependencies [[`799bc898bfb207e2ccd4b2027e3fb4db4372292b`](https://github.com/ethereum-optimism/optimism/commit/799bc898bfb207e2ccd4b2027e3fb4db4372292b)]: - - @eth-optimism/sdk@3.3.1 - -## 0.6.4 - -### Patch Changes - -- [#9964](https://github.com/ethereum-optimism/optimism/pull/9964) [`8241220898128e1f61064f22dcb6fdd0a5f043c3`](https://github.com/ethereum-optimism/optimism/commit/8241220898128e1f61064f22dcb6fdd0a5f043c3) Thanks [@roninjin10](https://github.com/roninjin10)! - Removed only-allow command from package.json - -- Updated dependencies [[`8241220898128e1f61064f22dcb6fdd0a5f043c3`](https://github.com/ethereum-optimism/optimism/commit/8241220898128e1f61064f22dcb6fdd0a5f043c3), [`ac5b061dfce6a9817b928a8703be9252daaeeca7`](https://github.com/ethereum-optimism/optimism/commit/ac5b061dfce6a9817b928a8703be9252daaeeca7), [`87093b0e9144a4709f11c7fbd631828847d891f9`](https://github.com/ethereum-optimism/optimism/commit/87093b0e9144a4709f11c7fbd631828847d891f9), [`372bca2257764be33797d67ddca9b53c3dd3c295`](https://github.com/ethereum-optimism/optimism/commit/372bca2257764be33797d67ddca9b53c3dd3c295)]: - - @eth-optimism/common-ts@0.8.9 - - @eth-optimism/contracts-bedrock@0.17.2 - - @eth-optimism/core-utils@0.13.2 - - @eth-optimism/sdk@3.3.0 - -## 0.6.3 - -### Patch Changes - -- Updated dependencies [[`5fe797f183e502c1c7e91fc1e74dd3cc664ba22e`](https://github.com/ethereum-optimism/optimism/commit/5fe797f183e502c1c7e91fc1e74dd3cc664ba22e), [`3dc129fade77ddf9d45bb4c2ecd34360d1aa838a`](https://github.com/ethereum-optimism/optimism/commit/3dc129fade77ddf9d45bb4c2ecd34360d1aa838a)]: - - @eth-optimism/sdk@3.2.3 - -## 0.6.2 - -### Patch Changes - -- Updated dependencies [[`3ccd12fe5c8c4c5a6acbf370d474ffa8db816562`](https://github.com/ethereum-optimism/optimism/commit/3ccd12fe5c8c4c5a6acbf370d474ffa8db816562)]: - - @eth-optimism/sdk@3.2.2 - -## 0.6.1 - -### Patch Changes - -- Updated dependencies [[`a1329f21f33ecafe409990964d3af7bf05a8a756`](https://github.com/ethereum-optimism/optimism/commit/a1329f21f33ecafe409990964d3af7bf05a8a756)]: - - @eth-optimism/sdk@3.2.1 - -## 0.6.0 - -### Minor Changes - -- [#9334](https://github.com/ethereum-optimism/optimism/pull/9334) [`1ed50c44a5c4fb7244ede3b4c45ea7bbf144c1e5`](https://github.com/ethereum-optimism/optimism/commit/1ed50c44a5c4fb7244ede3b4c45ea7bbf144c1e5) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Updates wd-mon inside chain-mon to support FPAC. - -### Patch Changes - -- Updated dependencies [[`1ed50c44a5c4fb7244ede3b4c45ea7bbf144c1e5`](https://github.com/ethereum-optimism/optimism/commit/1ed50c44a5c4fb7244ede3b4c45ea7bbf144c1e5), [`d99d425a4f73fba19ffcf180deb0ef48ff3b9a6a`](https://github.com/ethereum-optimism/optimism/commit/d99d425a4f73fba19ffcf180deb0ef48ff3b9a6a), [`79effc52e8b82d15b5eda43acf540ac6c5f8d5d7`](https://github.com/ethereum-optimism/optimism/commit/79effc52e8b82d15b5eda43acf540ac6c5f8d5d7), [`73a748575e7c3d67c293814a12bf41eee216163c`](https://github.com/ethereum-optimism/optimism/commit/73a748575e7c3d67c293814a12bf41eee216163c), [`44a2d9cec5f3b309b723b3e4dd8d29b5b70f1cc8`](https://github.com/ethereum-optimism/optimism/commit/44a2d9cec5f3b309b723b3e4dd8d29b5b70f1cc8)]: - - @eth-optimism/common-ts@0.8.8 - - @eth-optimism/sdk@3.2.0 - - @eth-optimism/contracts-bedrock@0.17.1 - -## 0.5.7 - -### Patch Changes - -- Updated dependencies [[`18becd7e4`](https://github.com/ethereum-optimism/optimism/commit/18becd7e457577c105f6bc03597e069334cb7433)]: - - @eth-optimism/sdk@3.1.8 - -## 0.5.6 - -### Patch Changes - -- Updated dependencies [[`6ec80fd19`](https://github.com/ethereum-optimism/optimism/commit/6ec80fd19d9155b17a0873672fb095d323f6e8fb)]: - - @eth-optimism/sdk@3.1.7 - -## 0.5.5 - -### Patch Changes - -- [#8306](https://github.com/ethereum-optimism/optimism/pull/8306) [`dcb252917`](https://github.com/ethereum-optimism/optimism/commit/dcb25291768ec0f2386486619971d5cd66fbb409) Thanks [@protolambda](https://github.com/protolambda)! - Fixed bug with custom chains not being able to set a custom portal address - -## 0.5.4 - -### Patch Changes - -- Updated dependencies [[`dd0e46986`](https://github.com/ethereum-optimism/optimism/commit/dd0e46986f19dcceb304fc48f2bd410685ecd179)]: - - @eth-optimism/sdk@3.1.6 - -## 0.5.3 - -### Patch Changes - -- Updated dependencies [[`2534eabb5`](https://github.com/ethereum-optimism/optimism/commit/2534eabb50afe76f176407f83cc1f1c606e6de69)]: - - @eth-optimism/sdk@3.1.5 - -## 0.5.2 - -### Patch Changes - -- [#7824](https://github.com/ethereum-optimism/optimism/pull/7824) [`98eb885f5`](https://github.com/ethereum-optimism/optimism/commit/98eb885f5003ee5e6b9bbd532a42bba2ad39cb4b) Thanks [@roninjin10](https://github.com/roninjin10)! - Bump node version to LTS node 20.9.0 - -## 0.5.1 - -### Patch Changes - -- [#7450](https://github.com/ethereum-optimism/optimism/pull/7450) [`ac90e16a7`](https://github.com/ethereum-optimism/optimism/commit/ac90e16a7f85c4f73661ae6023135c3d00421c1e) Thanks [@roninjin10](https://github.com/roninjin10)! - Updated dev dependencies related to testing that is causing audit tooling to report failures - -- Updated dependencies [[`ac90e16a7`](https://github.com/ethereum-optimism/optimism/commit/ac90e16a7f85c4f73661ae6023135c3d00421c1e)]: - - @eth-optimism/common-ts@0.8.7 - - @eth-optimism/contracts-bedrock@0.16.2 - - @eth-optimism/core-utils@0.13.1 - - @eth-optimism/sdk@3.1.4 - -## 0.5.0 - -### Minor Changes - -- [#7178](https://github.com/ethereum-optimism/optimism/pull/7178) [`85d1622df`](https://github.com/ethereum-optimism/optimism/commit/85d1622dfdc16f220f7df0be42ba8cbc5dea31c5) Thanks [@tynes](https://github.com/tynes)! - Use node.js v18 - -### Patch Changes - -- Updated dependencies [[`210b2c81d`](https://github.com/ethereum-optimism/optimism/commit/210b2c81dd383bad93480aa876b283d9a0c991c2), [`679207751`](https://github.com/ethereum-optimism/optimism/commit/6792077510fd76553c179d8b8d068262cda18db6), [`2440f5e7a`](https://github.com/ethereum-optimism/optimism/commit/2440f5e7ab6577f2d2e9c8b0c78c014290dde8e7)]: - - @eth-optimism/core-utils@0.13.0 - - @eth-optimism/sdk@3.1.3 - - @eth-optimism/contracts-bedrock@0.16.1 - - @eth-optimism/common-ts@0.8.6 - -## 0.4.4 - -### Patch Changes - -- Updated dependencies [[`9c3a03855`](https://github.com/ethereum-optimism/optimism/commit/9c3a03855dc982f0b4e1d664e83271883536632b), [`33eb63b10`](https://github.com/ethereum-optimism/optimism/commit/33eb63b10559a2267c814eda8129447c72940839)]: - - @eth-optimism/sdk@3.1.2 - - @eth-optimism/common-ts@0.8.5 - -## 0.4.3 - -### Patch Changes - -- [#6796](https://github.com/ethereum-optimism/optimism/pull/6796) [`a196c63ad`](https://github.com/ethereum-optimism/optimism/commit/a196c63ad67de04c4143e0ccd6fe4dc27fb2833b) Thanks [@roninjin10](https://github.com/roninjin10)! - Upgraded npm dependencies to latest - -- Updated dependencies [[`dfa309e34`](https://github.com/ethereum-optimism/optimism/commit/dfa309e3430ebc8790b932554dde120aafc4161e)]: - - @eth-optimism/core-utils@0.12.3 - - @eth-optimism/common-ts@0.8.4 - - @eth-optimism/sdk@3.1.1 - -## 0.4.2 - -### Patch Changes - -- [#6469](https://github.com/ethereum-optimism/optimism/pull/6469) [`0c769680e`](https://github.com/ethereum-optimism/optimism/commit/0c769680e44208c086deef2f9c03c37da2b536fe) Thanks [@maurelian](https://github.com/maurelian)! - Update language in fault-mon from batches to outputs - -## 0.4.1 - -### Patch Changes - -- [#6206](https://github.com/ethereum-optimism/optimism/pull/6206) [`3969730dc`](https://github.com/ethereum-optimism/optimism/commit/3969730dc938947a7105c27989e53d4b5cf788a9) Thanks [@tynes](https://github.com/tynes)! - Update import path for artifact - -- Updated dependencies [[`a666c4f20`](https://github.com/ethereum-optimism/optimism/commit/a666c4f2082253abbb68c0678e5a0a1ed0c00f4b), [`ff577455f`](https://github.com/ethereum-optimism/optimism/commit/ff577455f196b5f5b8a889339b845561ca6c538a), [`89ca741a6`](https://github.com/ethereum-optimism/optimism/commit/89ca741a63c5e07f9d691bb6f7a89f7718fc49ca), [`c11039060`](https://github.com/ethereum-optimism/optimism/commit/c11039060bc037a88916c2cba602687b6d69ad1a), [`72d184854`](https://github.com/ethereum-optimism/optimism/commit/72d184854ebad8b2025641f126ed76573b1f0ac3), [`77da6edc6`](https://github.com/ethereum-optimism/optimism/commit/77da6edc643e0b5e39f7b6bb41c3c7ead418a876), [`3f13fd0bb`](https://github.com/ethereum-optimism/optimism/commit/3f13fd0bbea051a4550f1df6def1a53a616aa6f6), [`639163253`](https://github.com/ethereum-optimism/optimism/commit/639163253a5e2128f1c21c446b68d358d38cbd30)]: - - @eth-optimism/sdk@3.1.0 - - @eth-optimism/contracts-bedrock@0.16.0 - - @eth-optimism/core-utils@0.12.2 - - @eth-optimism/common-ts@0.8.3 - -## 0.4.0 - -### Minor Changes - -- d6388be4a: Added a new service wallet-mon to identify unexpected transfers from key accounts - -### Patch Changes - -- 287d317d3: Fixed an issue with logging the wrong timestamp. -- Updated dependencies [8d7dcc70c] -- Updated dependencies [119754c2f] -- Updated dependencies [d6388be4a] -- Updated dependencies [af292562f] - - @eth-optimism/core-utils@0.12.1 - - @eth-optimism/sdk@3.0.0 - - @eth-optimism/contracts-bedrock@0.15.0 - - @eth-optimism/common-ts@0.8.2 - -## 0.3.1 - -### Patch Changes - -- a26c484af: Fixes a bug in the wd-mon service where a node connection failure event was not handled correctly -- Updated dependencies [2129dafa3] -- Updated dependencies [a1b7ff9e3] -- Updated dependencies [8133872ed] -- Updated dependencies [afc2ab8c9] -- Updated dependencies [188d1e930] -- Updated dependencies [5063a69fb] -- Updated dependencies [aa854bdd8] - - @eth-optimism/contracts-periphery@1.0.8 - - @eth-optimism/sdk@2.1.0 - -## 0.3.0 - -### Minor Changes - -- 1e7897c81: Introduces the balance-mon service to chain-mon. - -### Patch Changes - -- dbe5eb308: Empty patch release to re-release packages that failed to be released by a bug in the release process. -- Updated dependencies [be3315689] - - @eth-optimism/sdk@2.0.2 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies [fecd42d67] -- Updated dependencies [66cafc00a] - - @eth-optimism/common-ts@0.8.1 - - @eth-optimism/sdk@2.0.1 - -## 0.2.0 - -### Minor Changes - -- 282bda091: Added a withdrawal monitoring service - -### Patch Changes - -- Updated dependencies [cb19e2f9c] - - @eth-optimism/sdk@2.0.0 - -## 0.1.3 - -### Patch Changes - -- @eth-optimism/sdk@1.10.4 - -## 0.1.2 - -### Patch Changes - -- @eth-optimism/sdk@1.10.3 - -## 0.1.1 - -### Patch Changes - -- 0515a7841: Added withdrawal monitoring to identify proven withdrawals not included in the L2ToL1MessagePasser's sentMessages mapping -- Updated dependencies [0e179781b] -- Updated dependencies [5372c9f5b] -- Updated dependencies [4ae94b412] - - @eth-optimism/common-ts@0.8.0 - - @eth-optimism/sdk@1.10.2 - -## 0.4.3 - -### Patch Changes - -- Updated dependencies [f04e5db2d] -- Updated dependencies [4c64a5811] - - @eth-optimism/common-ts@0.7.1 - - @eth-optimism/contracts-periphery@1.0.7 - - @eth-optimism/sdk@1.10.1 - -## 0.4.2 - -### Patch Changes - -- Updated dependencies [3f4b3c328] - - @eth-optimism/sdk@1.10.0 - -## 0.4.1 - -### Patch Changes - -- Updated dependencies [0222215f6] - - @eth-optimism/contracts-periphery@1.0.6 - - @eth-optimism/sdk@1.9.1 - -## 0.4.0 - -### Minor Changes - -- 9b2891852: Refactors BaseServiceV2 slightly, merges standard options with regular options - -### Patch Changes - -- ab8ec365c: Updates BaseServiceV2 so that options are secret by default. Services will have to explicitly mark options as "public" for those options to be logged and included in the metadata metric. -- Updated dependencies [fe8f2afd0] -- Updated dependencies [e23f60f63] -- Updated dependencies [886fec5bb] -- Updated dependencies [596d51852] -- Updated dependencies [ab8ec365c] -- Updated dependencies [c12aeb2f9] -- Updated dependencies [a610b4f3b] -- Updated dependencies [55515ba14] -- Updated dependencies [ba8b94a60] -- Updated dependencies [9b2891852] -- Updated dependencies [d1f9098f9] -- Updated dependencies [c6c9c7dbf] -- Updated dependencies [bf5f9febd] -- Updated dependencies [ffcee1013] -- Updated dependencies [9a996a13c] -- Updated dependencies [09924e8ed] -- Updated dependencies [746ce5545] -- Updated dependencies [eceb0de1d] -- Updated dependencies [0e0546a11] - - @eth-optimism/contracts-periphery@1.0.5 - - @eth-optimism/common-ts@0.7.0 - - @eth-optimism/sdk@1.9.0 - -## 0.3.24 - -### Patch Changes - -- 1d3c749a2: Bumps the version of ts-node used -- Updated dependencies [1d3c749a2] -- Updated dependencies [767585b07] -- Updated dependencies [c975c9620] -- Updated dependencies [136ea1785] - - @eth-optimism/contracts-periphery@1.0.4 - - @eth-optimism/sdk@1.8.0 - - @eth-optimism/core-utils@0.12.0 - - @eth-optimism/common-ts@0.6.8 - -## 0.3.23 - -### Patch Changes - -- Updated dependencies [f49b71d50] -- Updated dependencies [1bfe79f20] - - @eth-optimism/contracts-periphery@1.0.3 - - @eth-optimism/sdk@1.7.0 - -## 0.3.22 - -### Patch Changes - -- 97b5f578c: Fixes how versions are imported for BaseServiceV2 services - - @eth-optimism/sdk@1.6.11 - -## 0.3.21 - -### Patch Changes - -- Updated dependencies [1e76cdb86] - - @eth-optimism/core-utils@0.11.0 - - @eth-optimism/common-ts@0.6.7 - - @eth-optimism/sdk@1.6.10 - -## 0.3.20 - -### Patch Changes - -- @eth-optimism/sdk@1.6.9 - -## 0.3.19 - -### Patch Changes - -- @eth-optimism/sdk@1.6.8 - -## 0.3.18 - -### Patch Changes - -- Updated dependencies [b40913b1] -- Updated dependencies [a5e715c3] -- Updated dependencies [e81a6ff5] -- Updated dependencies [a3242d4f] -- Updated dependencies [ffa5297e] - - @eth-optimism/sdk@1.6.7 - - @eth-optimism/contracts-periphery@1.0.2 - -## 0.3.17 - -### Patch Changes - -- Updated dependencies [02c457a5] -- Updated dependencies [ce7da914] -- Updated dependencies [d3fe9b6d] -- Updated dependencies [220ad4ef] -- Updated dependencies [5d86ff0e] - - @eth-optimism/contracts-periphery@1.0.1 - - @eth-optimism/common-ts@0.6.6 - - @eth-optimism/sdk@1.6.6 - -## 0.3.16 - -### Patch Changes - -- Updated dependencies [e2faaa8b] -- Updated dependencies [5c3f2b1f] -- Updated dependencies [3883f34b] - - @eth-optimism/sdk@1.6.5 - - @eth-optimism/contracts-periphery@1.0.0 - -## 0.3.15 - -### Patch Changes - -- 7215f4ce: Bump ethers to 5.7.0 globally -- 0ceff8b8: Drippie Spearbit audit fix for issue #25, reorder DripStatus enum for clarity -- Updated dependencies [7215f4ce] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [206f6033] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [d7679ca4] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] -- Updated dependencies [0ceff8b8] - - @eth-optimism/common-ts@0.6.5 - - @eth-optimism/contracts-periphery@0.2.4 - - @eth-optimism/core-utils@0.10.1 - - @eth-optimism/sdk@1.6.4 - -## 0.3.14 - -### Patch Changes - -- @eth-optimism/sdk@1.6.3 - -## 0.3.13 - -### Patch Changes - -- Updated dependencies [cfa81f88] - - @eth-optimism/sdk@1.6.2 - -## 0.3.12 - -### Patch Changes - -- Updated dependencies [f4bf4f52] -- Updated dependencies [b27d0fa7] -- Updated dependencies [dbfea116] - - @eth-optimism/contracts-periphery@0.2.3 - - @eth-optimism/sdk@1.6.1 - - @eth-optimism/core-utils@0.10.0 - - @eth-optimism/common-ts@0.6.4 - -## 0.3.11 - -### Patch Changes - -- Updated dependencies [ea371af2] -- Updated dependencies [3df66a9a] -- Updated dependencies [8323407f] -- Updated dependencies [3af9c7a9] -- Updated dependencies [aa2949ef] -- Updated dependencies [a1a73e64] -- Updated dependencies [f53c30b9] - - @eth-optimism/contracts-periphery@0.2.2 - - @eth-optimism/sdk@1.6.0 - -## 0.3.10 - -### Patch Changes - -- Updated dependencies [dcd715a6] - - @eth-optimism/sdk@1.5.0 - -## 0.3.9 - -### Patch Changes - -- Updated dependencies [0df744f6] -- Updated dependencies [8ae39154] -- Updated dependencies [f05ab6b6] -- Updated dependencies [dac4a9f0] - - @eth-optimism/core-utils@0.9.3 - - @eth-optimism/sdk@1.4.0 - - @eth-optimism/common-ts@0.6.3 - -## 0.3.8 - -### Patch Changes - -- Updated dependencies [0bf3b9b4] -- Updated dependencies [93d3bd41] -- Updated dependencies [680714c1] -- Updated dependencies [8d26459b] -- Updated dependencies [4477fe9f] -- Updated dependencies [29830750] -- Updated dependencies [bcfd1edc] -- Updated dependencies [0bf3b9b4] - - @eth-optimism/core-utils@0.9.2 - - @eth-optimism/contracts-periphery@0.2.1 - - @eth-optimism/sdk@1.3.1 - - @eth-optimism/common-ts@0.6.2 - -## 0.3.7 - -### Patch Changes - -- Updated dependencies [032f7214] - - @eth-optimism/sdk@1.3.0 - -## 0.3.6 - -### Patch Changes - -- Updated dependencies [95fc3fbf] -- Updated dependencies [019657db] -- Updated dependencies [6ff5c0a3] -- Updated dependencies [119f0e97] -- Updated dependencies [9c8b1f00] -- Updated dependencies [8a335b7b] -- Updated dependencies [f9fee446] -- Updated dependencies [89d01f2e] - - @eth-optimism/contracts-periphery@0.2.0 - - @eth-optimism/core-utils@0.9.1 - - @eth-optimism/sdk@1.2.1 - - @eth-optimism/common-ts@0.6.1 - -## 0.3.5 - -### Patch Changes - -- Updated dependencies [3799bb6f] - - @eth-optimism/contracts-periphery@0.1.5 - -## 0.3.4 - -### Patch Changes - -- Updated dependencies [977493bc] -- Updated dependencies [700dcbb0] -- Updated dependencies [3d1cb720] - - @eth-optimism/sdk@1.2.0 - - @eth-optimism/core-utils@0.9.0 - - @eth-optimism/common-ts@0.6.0 - -## 0.3.3 - -### Patch Changes - -- 7142175a: Fix release -- Updated dependencies [cb71fcde] -- Updated dependencies [10e41522] -- Updated dependencies [9aa8049c] - - @eth-optimism/common-ts@0.5.0 - - @eth-optimism/contracts-periphery@0.1.4 - -## 0.3.2 - -### Patch Changes - -- 29ff7462: Revert es target back to 2017 -- Updated dependencies [c201f3f1] -- Updated dependencies [da1633a3] -- Updated dependencies [61a30273] -- Updated dependencies [a320e744] -- Updated dependencies [29ff7462] -- Updated dependencies [604dd315] -- Updated dependencies [52b26878] - - @eth-optimism/common-ts@0.4.0 - - @eth-optimism/contracts-periphery@0.1.3 - - @eth-optimism/core-utils@0.8.7 - - @eth-optimism/sdk@1.1.9 - -## 0.3.1 - -### Patch Changes - -- Updated dependencies [9ba869a7] -- Updated dependencies [050859fd] - - @eth-optimism/common-ts@0.3.1 - -## 0.3.0 - -### Minor Changes - -- 84a8934c: BaseServiceV2 exposes service name and version as standard synthetic metric - -### Patch Changes - -- Updated dependencies [d9e39931] -- Updated dependencies [84a8934c] - - @eth-optimism/common-ts@0.3.0 - -## 0.2.0 - -### Minor Changes - -- 982cb980: Release drippie-mon - -### Patch Changes - -- Updated dependencies [e0b89fcd] -- Updated dependencies [982cb980] -- Updated dependencies [9142adc4] -- Updated dependencies [9ecbf3e5] - - @eth-optimism/contracts-periphery@0.1.2 - - @eth-optimism/common-ts@0.2.10 - - @eth-optimism/sdk@1.1.8 diff --git a/packages/chain-mon/LICENSE b/packages/chain-mon/LICENSE deleted file mode 100644 index 6a7da5218bb2..000000000000 --- a/packages/chain-mon/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright 2020-2021 Optimism - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/chain-mon/README.md b/packages/chain-mon/README.md deleted file mode 100644 index 28ab6ffdf4ee..000000000000 --- a/packages/chain-mon/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# @eth-optimism/chain-mon - -[![codecov](https://codecov.io/gh/ethereum-optimism/optimism/branch/develop/graph/badge.svg?token=0VTG7PG7YR&flag=chain-mon-tests)](https://codecov.io/gh/ethereum-optimism/optimism) - -`chain-mon` is a collection of chain monitoring services. - -## Installation - -Clone, install, and build the Optimism monorepo: - -``` -git clone https://github.com/ethereum-optimism/optimism.git -pnpm install -pnpm build -``` - -## Running a service - -Copy `.env.example` into a new file named `.env`, then set the environment variables listed there depending on the service you want to run. -Once your environment variables have been set, run via: - -``` -pnpm start: -``` - -For example, to run `balance-mon`, execute: - -``` -pnpm start:balance-mon -``` diff --git a/packages/chain-mon/contrib/initialized-upgraded-mon/service.ts b/packages/chain-mon/contrib/initialized-upgraded-mon/service.ts deleted file mode 100644 index 32249797a35d..000000000000 --- a/packages/chain-mon/contrib/initialized-upgraded-mon/service.ts +++ /dev/null @@ -1,233 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - Gauge, - Counter, - validators, - waitForProvider, -} from '@eth-optimism/common-ts' -import { getChainId, compareAddrs } from '@eth-optimism/core-utils' -import { Provider, TransactionResponse } from '@ethersproject/abstract-provider' -import mainnetConfig from '@eth-optimism/contracts-bedrock/deploy-config/mainnet.json' -import sepoliaConfig from '@eth-optimism/contracts-bedrock/deploy-config/sepolia.json' - -import { version } from '../../package.json' - -const networks = { - 1: { - name: 'mainnet', - l1StartingBlockTag: mainnetConfig.l1StartingBlockTag, - }, - 10: { - name: 'op-mainnet', - l1StartingBlockTag: null, - }, - 11155111: { - name: 'sepolia', - l1StartingBlockTag: sepoliaConfig.l1StartingBlockTag, - }, - 11155420: { - name: 'op-sepolia', - l1StartingBlockTag: null, - }, - 420: { - name: 'op-goerli', - l1StartingBlockTag: null, - }, -} - -// keccak256("Initialized(uint8)") = 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498 -const topic_initialized = - '0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498' - -// keccak256("Upgraded(address)") = 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b -const topic_upgraded = - '0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b' - -type InitializedUpgradedMonOptions = { - rpc: Provider - startBlockNumber: number - contracts: string -} - -type InitializedUpgradedMonMetrics = { - initializedCalls: Counter - upgradedCalls: Counter - unexpectedRpcErrors: Counter -} - -type InitializedUpgradedMonState = { - chainId: number - highestUncheckedBlockNumber: number - contracts: Array<{ label: string; address: string }> -} - -export class InitializedUpgradedMonService extends BaseServiceV2< - InitializedUpgradedMonOptions, - InitializedUpgradedMonMetrics, - InitializedUpgradedMonState -> { - constructor( - options?: Partial - ) { - super({ - version, - name: 'initialized-upgraded-mon', - loop: true, - options: { - loopIntervalMs: 1000, - ...options, - }, - optionsSpec: { - rpc: { - validator: validators.provider, - desc: 'Provider for network to monitor balances on', - }, - startBlockNumber: { - validator: validators.num, - default: -1, - desc: 'L1 block number to start checking from', - public: true, - }, - contracts: { - validator: validators.str, - desc: 'JSON array of [{ label, address }] to monitor contracts for', - public: true, - }, - }, - metricsSpec: { - initializedCalls: { - type: Gauge, - desc: 'Successful transactions to tracked contracts emitting initialized event', - labels: ['label', 'address'], - }, - upgradedCalls: { - type: Gauge, - desc: 'Successful transactions to tracked contracts emitting upgraded event', - labels: ['label', 'address'], - }, - unexpectedRpcErrors: { - type: Counter, - desc: 'Number of unexpected RPC errors', - labels: ['section', 'name'], - }, - }, - }) - } - - protected async init(): Promise { - // Connect to L1. - await waitForProvider(this.options.rpc, { - logger: this.logger, - name: 'L1', - }) - - this.state.chainId = await getChainId(this.options.rpc) - - const l1StartingBlockTag = networks[this.state.chainId].l1StartingBlockTag - - if (this.options.startBlockNumber === -1) { - const block_number = - l1StartingBlockTag != null - ? (await this.options.rpc.getBlock(l1StartingBlockTag)).number - : 0 - this.state.highestUncheckedBlockNumber = block_number - } else { - this.state.highestUncheckedBlockNumber = this.options.startBlockNumber - } - - try { - this.state.contracts = JSON.parse(this.options.contracts) - } catch (e) { - throw new Error( - 'unable to start service because provided options is not valid json' - ) - } - } - - protected async main(): Promise { - if ( - (await this.options.rpc.getBlockNumber()) < - this.state.highestUncheckedBlockNumber - ) { - this.logger.info('Waiting for new blocks') - return - } - - const block = await this.options.rpc.getBlock( - this.state.highestUncheckedBlockNumber - ) - this.logger.info('Checking block', { - number: block.number, - }) - - const transactions: TransactionResponse[] = [] - for (const txHash of block.transactions) { - const t = await this.options.rpc.getTransaction(txHash) - transactions.push(t) - } - - for (const transaction of transactions) { - for (const contract of this.state.contracts) { - const to = - transaction.to != null ? transaction.to : transaction['creates'] - if (compareAddrs(contract.address, to)) { - try { - const transactionReceipt = await transaction.wait() - for (const log of transactionReceipt.logs) { - if (log.topics.includes(topic_initialized)) { - this.metrics.initializedCalls.inc({ - label: contract.label, - address: contract.address, - }) - this.logger.info('initialized event', { - label: contract.label, - address: contract.address, - }) - } else if (log.topics.includes(topic_upgraded)) { - this.metrics.upgradedCalls.inc({ - label: contract.label, - address: contract.address, - }) - this.logger.info('upgraded event', { - label: contract.label, - address: contract.address, - }) - } - } - } catch (err) { - // If error is due to transaction failing, ignore transaction - if ( - err.message.length >= 18 && - err.message.slice(0, 18) === 'transaction failed' - ) { - break - } - // Otherwise, we have an unexpected RPC error - this.logger.info(`got unexpected RPC error`, { - section: 'creations', - name: 'NULL', - err, - }) - - this.metrics.unexpectedRpcErrors.inc({ - section: 'creations', - name: 'NULL', - }) - - return - } - } - } - } - this.logger.info('Checked block', { - number: this.state.highestUncheckedBlockNumber, - }) - this.state.highestUncheckedBlockNumber++ - } -} - -if (require.main === module) { - const service = new InitializedUpgradedMonService() - service.run() -} diff --git a/packages/chain-mon/contrib/replica-mon/README.md b/packages/chain-mon/contrib/replica-mon/README.md deleted file mode 100644 index 5c2adb0b7430..000000000000 --- a/packages/chain-mon/contrib/replica-mon/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# @eth-optimism/replica-healthcheck - -[![codecov](https://codecov.io/gh/ethereum-optimism/optimism/branch/develop/graph/badge.svg?token=0VTG7PG7YR&flag=replica-healthcheck-tests)](https://codecov.io/gh/ethereum-optimism/optimism) - -## What is this? - -`replica-healthcheck` is an express server to be run alongside a replica instance, to ensure that the replica is healthy. Currently, it exposes metrics on syncing stats and exits when the replica has a mismatched state root against the sequencer. - - -## Installation - -Clone, install, and build the Optimism monorepo: - -``` -git clone https://github.com/ethereum-optimism/optimism.git -pnpm install -pnpm build -``` - -## Running the service (manual) - -Copy `.env.example` into a new file named `.env`, then set the environment variables listed there. -You can view a list of all environment variables and descriptions for each via: - -``` -pnpm start:replica-mon --help -``` - -Once your environment variables have been set, run the healthcheck service via: - -``` -pnpm start:replica-mon -``` diff --git a/packages/chain-mon/contrib/replica-mon/index.ts b/packages/chain-mon/contrib/replica-mon/index.ts deleted file mode 100644 index caf7fffa1017..000000000000 --- a/packages/chain-mon/contrib/replica-mon/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './service' diff --git a/packages/chain-mon/contrib/replica-mon/service.ts b/packages/chain-mon/contrib/replica-mon/service.ts deleted file mode 100644 index cf43717c6b99..000000000000 --- a/packages/chain-mon/contrib/replica-mon/service.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { Provider, Block } from '@ethersproject/abstract-provider' -import { - BaseServiceV2, - StandardOptions, - Counter, - Gauge, - validators, -} from '@eth-optimism/common-ts' -import { sleep } from '@eth-optimism/core-utils' - -import { version } from '../../package.json' - -type HealthcheckOptions = { - referenceRpcProvider: Provider - targetRpcProvider: Provider - onDivergenceWaitMs?: number -} - -type HealthcheckMetrics = { - lastMatchingStateRootHeight: Gauge - isCurrentlyDiverged: Gauge - referenceHeight: Gauge - targetHeight: Gauge - heightDifference: Gauge - targetConnectionFailures: Counter - referenceConnectionFailures: Counter -} - -type HealthcheckState = {} - -export class HealthcheckService extends BaseServiceV2< - HealthcheckOptions, - HealthcheckMetrics, - HealthcheckState -> { - constructor(options?: Partial) { - super({ - version, - name: 'healthcheck', - options: { - loopIntervalMs: 5000, - ...options, - }, - optionsSpec: { - referenceRpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L1', - }, - targetRpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L2', - }, - onDivergenceWaitMs: { - validator: validators.num, - desc: 'Waiting time in ms per loop when divergence is detected', - default: 60_000, - public: true, - }, - }, - metricsSpec: { - lastMatchingStateRootHeight: { - type: Gauge, - desc: 'Highest matching state root between target and reference', - }, - isCurrentlyDiverged: { - type: Gauge, - desc: 'Whether or not the two nodes are currently diverged', - }, - referenceHeight: { - type: Gauge, - desc: 'Block height of the reference client', - }, - targetHeight: { - type: Gauge, - desc: 'Block height of the target client', - }, - heightDifference: { - type: Gauge, - desc: 'Difference in block heights between the two clients', - }, - targetConnectionFailures: { - type: Counter, - desc: 'Number of connection failures to the target client', - }, - referenceConnectionFailures: { - type: Counter, - desc: 'Number of connection failures to the reference client', - }, - }, - }) - } - - async main() { - // Get the latest block from the target client and check for connection failures. - let targetLatest: Block - try { - targetLatest = await this.options.targetRpcProvider.getBlock('latest') - } catch (err) { - if (err.message.includes('could not detect network')) { - this.logger.error('target client not connected') - this.metrics.targetConnectionFailures.inc() - return - } else { - throw err - } - } - - // Get the latest block from the reference client and check for connection failures. - let referenceLatest: Block - try { - referenceLatest = await this.options.referenceRpcProvider.getBlock( - 'latest' - ) - } catch (err) { - if (err.message.includes('could not detect network')) { - this.logger.error('reference client not connected') - this.metrics.referenceConnectionFailures.inc() - return - } else { - throw err - } - } - - // Later logic will depend on the height difference. - const heightDiff = Math.abs(referenceLatest.number - targetLatest.number) - const minBlock = Math.min(targetLatest.number, referenceLatest.number) - - // Update these metrics first so they'll refresh no matter what. - this.metrics.targetHeight.set(targetLatest.number) - this.metrics.referenceHeight.set(referenceLatest.number) - this.metrics.heightDifference.set(heightDiff) - - this.logger.info(`latest block heights`, { - targetHeight: targetLatest.number, - referenceHeight: referenceLatest.number, - heightDifference: heightDiff, - minBlockNumber: minBlock, - }) - - const reference = await this.options.referenceRpcProvider.getBlock(minBlock) - if (!reference) { - // This is ok, but we should log it and restart the loop. - this.logger.info(`reference block was not found`, { - blockNumber: reference.number, - }) - return - } - - const target = await this.options.targetRpcProvider.getBlock(minBlock) - if (!target) { - // This is ok, but we should log it and restart the loop. - this.logger.info(`target block was not found`, { - blockNumber: target.number, - }) - return - } - - // We used to use state roots here, but block hashes are even more reliable because they will - // catch discrepancies in blocks that may not impact the state. For example, if clients have - // blocks with two different timestamps, the state root will only diverge if the timestamp is - // actually used during the transaction(s) within the block. - if (reference.hash !== target.hash) { - this.logger.error(`reference client has different hash for block`, { - blockNumber: target.number, - referenceHash: reference.hash, - targetHash: target.hash, - }) - - // The main loop polls for "latest" so aren't checking every block. We need to use a binary - // search to find the first block where a mismatch occurred. - this.logger.info(`beginning binary search to find first mismatched block`) - - let start = 0 - let end = target.number - while (start !== end) { - const mid = Math.floor((start + end) / 2) - this.logger.info(`checking block`, { blockNumber: mid }) - const blockA = await this.options.referenceRpcProvider.getBlock(mid) - const blockB = await this.options.targetRpcProvider.getBlock(mid) - - if (blockA.hash === blockB.hash) { - start = mid + 1 - } else { - end = mid - } - } - - this.logger.info(`found first mismatched block`, { blockNumber: end }) - this.metrics.lastMatchingStateRootHeight.set(end) - this.metrics.isCurrentlyDiverged.set(1) - - // Old version of the service would exit here, but we want to keep looping just in case the - // the system recovers later. This is better than exiting because it means we don't have to - // restart the entire service. Running these checks once per minute will not trigger too many - // requests, so this should be fine. - await sleep(this.options.onDivergenceWaitMs) - return - } - - this.logger.info(`blocks are matching`, { - blockNumber: target.number, - }) - - // Update latest matching state root height and reset the diverged metric in case it was set. - this.metrics.lastMatchingStateRootHeight.set(target.number) - this.metrics.isCurrentlyDiverged.set(0) - } -} - -if (require.main === module) { - const service = new HealthcheckService() - service.run() -} diff --git a/packages/chain-mon/contrib/wallet-mon/service.ts b/packages/chain-mon/contrib/wallet-mon/service.ts deleted file mode 100644 index 6aa97394e8d8..000000000000 --- a/packages/chain-mon/contrib/wallet-mon/service.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - Gauge, - Counter, - validators, - waitForProvider, -} from '@eth-optimism/common-ts' -import { getChainId, compareAddrs } from '@eth-optimism/core-utils' -import { Provider, TransactionResponse } from '@ethersproject/abstract-provider' -import mainnetConfig from '@eth-optimism/contracts-bedrock/deploy-config/mainnet.json' - -import { version } from '../../package.json' - -const networks = { - 1: { - name: 'mainnet', - l1StartingBlockTag: mainnetConfig.l1StartingBlockTag, - accounts: [ - { - label: 'Proposer', - wallet: mainnetConfig.l2OutputOracleProposer, - target: '0xdfe97868233d1aa22e815a266982f2cf17685a27', - }, - { - label: 'Batcher', - wallet: mainnetConfig.batchSenderAddress, - target: mainnetConfig.batchInboxAddress, - }, - ], - }, -} - -type WalletMonOptions = { - rpc: Provider - startBlockNumber: number -} - -type WalletMonMetrics = { - validatedCalls: Counter - unexpectedCalls: Counter - unexpectedRpcErrors: Counter -} - -type WalletMonState = { - chainId: number - highestUncheckedBlockNumber: number -} - -export class WalletMonService extends BaseServiceV2< - WalletMonOptions, - WalletMonMetrics, - WalletMonState -> { - constructor(options?: Partial) { - super({ - version, - name: 'wallet-mon', - loop: true, - options: { - loopIntervalMs: 1000, - ...options, - }, - optionsSpec: { - rpc: { - validator: validators.provider, - desc: 'Provider for network to monitor balances on', - }, - startBlockNumber: { - validator: validators.num, - default: -1, - desc: 'L1 block number to start checking from', - public: true, - }, - }, - metricsSpec: { - validatedCalls: { - type: Gauge, - desc: 'Transactions from the account checked', - labels: ['wallet', 'target', 'nickname'], - }, - unexpectedCalls: { - type: Counter, - desc: 'Number of unexpected wallets', - labels: ['wallet', 'target', 'nickname', 'transactionHash'], - }, - unexpectedRpcErrors: { - type: Counter, - desc: 'Number of unexpected RPC errors', - labels: ['section', 'name'], - }, - }, - }) - } - - protected async init(): Promise { - // Connect to L1. - await waitForProvider(this.options.rpc, { - logger: this.logger, - name: 'L1', - }) - - this.state.chainId = await getChainId(this.options.rpc) - - const l1StartingBlockTag = networks[this.state.chainId].l1StartingBlockTag - - if (this.options.startBlockNumber === -1) { - const block = await this.options.rpc.getBlock(l1StartingBlockTag) - this.state.highestUncheckedBlockNumber = block.number - } else { - this.state.highestUncheckedBlockNumber = this.options.startBlockNumber - } - } - - protected async main(): Promise { - if ( - (await this.options.rpc.getBlockNumber()) < - this.state.highestUncheckedBlockNumber - ) { - this.logger.info('Waiting for new blocks') - return - } - - const network = networks[this.state.chainId] - const accounts = network.accounts - - const block = await this.options.rpc.getBlock( - this.state.highestUncheckedBlockNumber - ) - this.logger.info('Checking block', { - number: block.number, - }) - - const transactions: TransactionResponse[] = [] - for (const txHash of block.transactions) { - const t = await this.options.rpc.getTransaction(txHash) - transactions.push(t) - } - - for (const transaction of transactions) { - for (const account of accounts) { - if (compareAddrs(account.wallet, transaction.from)) { - if (compareAddrs(account.target, transaction.to)) { - this.metrics.validatedCalls.inc({ - nickname: account.label, - wallet: account.address, - target: account.target, - }) - this.logger.info('validated call', { - nickname: account.label, - wallet: account.address, - target: account.target, - }) - } else { - this.metrics.unexpectedCalls.inc({ - nickname: account.label, - wallet: account.address, - target: transaction.to, - transactionHash: transaction.hash, - }) - this.logger.error('Unexpected call detected', { - nickname: account.label, - address: account.address, - target: transaction.to, - transactionHash: transaction.hash, - }) - } - } - } - } - this.logger.info('Checked block', { - number: this.state.highestUncheckedBlockNumber, - }) - this.state.highestUncheckedBlockNumber++ - } -} - -if (require.main === module) { - const service = new WalletMonService() - service.run() -} diff --git a/packages/chain-mon/hardhat.config.ts b/packages/chain-mon/hardhat.config.ts deleted file mode 100644 index 51ebadf6ceec..000000000000 --- a/packages/chain-mon/hardhat.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HardhatUserConfig } from 'hardhat/types' - -// Hardhat plugins -import '@nomiclabs/hardhat-ethers' -import '@nomiclabs/hardhat-waffle' - -const config: HardhatUserConfig = { - mocha: { - timeout: 50000, - }, -} - -export default config diff --git a/packages/chain-mon/internal/balance-mon/service.ts b/packages/chain-mon/internal/balance-mon/service.ts deleted file mode 100644 index 3382fc8bc8bb..000000000000 --- a/packages/chain-mon/internal/balance-mon/service.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - Gauge, - Counter, - validators, -} from '@eth-optimism/common-ts' -import { Provider } from '@ethersproject/abstract-provider' - -import { version } from '../../package.json' - -type BalanceMonOptions = { - rpc: Provider - accounts: string -} - -type BalanceMonMetrics = { - balances: Gauge - unexpectedRpcErrors: Counter -} - -type BalanceMonState = { - accounts: Array<{ address: string; nickname: string }> -} - -export class BalanceMonService extends BaseServiceV2< - BalanceMonOptions, - BalanceMonMetrics, - BalanceMonState -> { - constructor(options?: Partial) { - super({ - version, - name: 'balance-mon', - loop: true, - options: { - loopIntervalMs: 60_000, - ...options, - }, - optionsSpec: { - rpc: { - validator: validators.provider, - desc: 'Provider for network to monitor balances on', - }, - accounts: { - validator: validators.str, - desc: 'JSON array of [{ address, nickname, safe }] to monitor balances and nonces of', - public: true, - }, - }, - metricsSpec: { - balances: { - type: Gauge, - desc: 'Balances of addresses', - labels: ['address', 'nickname'], - }, - unexpectedRpcErrors: { - type: Counter, - desc: 'Number of unexpected RPC errors', - labels: ['section', 'name'], - }, - }, - }) - } - - protected async init(): Promise { - this.state.accounts = JSON.parse(this.options.accounts) - } - - protected async main(): Promise { - for (const account of this.state.accounts) { - try { - const balance = await this.options.rpc.getBalance(account.address) - this.logger.info(`got balance`, { - address: account.address, - nickname: account.nickname, - balance: balance.toString(), - }) - - // Parse the balance as an integer instead of via toNumber() to avoid ethers throwing an - // an error. We might get rounding errors but we don't need perfect precision here, just a - // generally accurate sense for what the current balance is. - this.metrics.balances.set( - { address: account.address, nickname: account.nickname }, - parseInt(balance.toString(), 10) - ) - } catch (err) { - this.logger.info(`got unexpected RPC error`, { - section: 'balances', - name: 'getBalance', - err, - }) - this.metrics.unexpectedRpcErrors.inc({ - section: 'balances', - name: 'getBalance', - }) - } - } - } -} - -if (require.main === module) { - const service = new BalanceMonService() - service.run() -} diff --git a/packages/chain-mon/internal/multisig-mon/service.ts b/packages/chain-mon/internal/multisig-mon/service.ts deleted file mode 100644 index 6b406a43dbf1..000000000000 --- a/packages/chain-mon/internal/multisig-mon/service.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { exec } from 'child_process' - -import { - BaseServiceV2, - StandardOptions, - Gauge, - Counter, - validators, -} from '@eth-optimism/common-ts' -import { Provider } from '@ethersproject/abstract-provider' -import { ethers } from 'ethers' - -import Safe from '../../src/abi/IGnosisSafe.0.8.19.json' -import OptimismPortal from '../../src/abi/OptimismPortal.json' -import { version } from '../../package.json' - -type MultisigMonOptions = { - rpc: Provider - accounts: string - onePassServiceToken: string -} - -type MultisigMonMetrics = { - safeNonce: Gauge - latestPreSignedPauseNonce: Gauge - pausedState: Gauge - unexpectedRpcErrors: Counter -} - -type MultisigMonState = { - accounts: Array<{ - nickname: string - safeAddress: string - optimismPortalAddress: string - vault: string - }> -} - -export class MultisigMonService extends BaseServiceV2< - MultisigMonOptions, - MultisigMonMetrics, - MultisigMonState -> { - constructor(options?: Partial) { - super({ - version, - name: 'multisig-mon', - loop: true, - options: { - loopIntervalMs: 60_000, - ...options, - }, - optionsSpec: { - rpc: { - validator: validators.provider, - desc: 'Provider for network to monitor balances on', - }, - accounts: { - validator: validators.str, - desc: 'JSON array of [{ nickname, safeAddress, optimismPortalAddress, vault }] to monitor', - public: true, - }, - onePassServiceToken: { - validator: validators.str, - desc: '1Password Service Token', - }, - }, - metricsSpec: { - safeNonce: { - type: Gauge, - desc: 'Safe nonce', - labels: ['address', 'nickname'], - }, - latestPreSignedPauseNonce: { - type: Gauge, - desc: 'Latest pre-signed pause nonce', - labels: ['address', 'nickname'], - }, - pausedState: { - type: Gauge, - desc: 'OptimismPortal paused state', - labels: ['address', 'nickname'], - }, - unexpectedRpcErrors: { - type: Counter, - desc: 'Number of unexpected RPC errors', - labels: ['section', 'name'], - }, - }, - }) - } - - protected async init(): Promise { - this.state.accounts = JSON.parse(this.options.accounts) - } - - protected async main(): Promise { - for (const account of this.state.accounts) { - // get the nonce 1pass - if (this.options.onePassServiceToken) { - await this.getOnePassNonce(account) - } - - // get the nonce from deployed safe - if (account.safeAddress) { - await this.getSafeNonce(account) - } - - // get the paused state of the OptimismPortal - if (account.optimismPortalAddress) { - await this.getPausedState(account) - } - } - } - - private async getPausedState(account: { - nickname: string - safeAddress: string - optimismPortalAddress: string - vault: string - }) { - try { - const optimismPortal = new ethers.Contract( - account.optimismPortalAddress, - OptimismPortal.abi, - this.options.rpc - ) - const paused = await optimismPortal.paused() - this.logger.info(`got paused state`, { - optimismPortalAddress: account.optimismPortalAddress, - nickname: account.nickname, - paused, - }) - - this.metrics.pausedState.set( - { address: account.optimismPortalAddress, nickname: account.nickname }, - paused ? 1 : 0 - ) - } catch (err) { - this.logger.error(`got unexpected RPC error`, { - section: 'pausedState', - name: 'getPausedState', - err, - }) - this.metrics.unexpectedRpcErrors.inc({ - section: 'pausedState', - name: 'getPausedState', - }) - } - } - - private async getOnePassNonce(account: { - nickname: string - safeAddress: string - optimismPortalAddress: string - vault: string - }) { - try { - exec( - `OP_SERVICE_ACCOUNT_TOKEN=${this.options.onePassServiceToken} op item list --format json --vault="${account.vault}"`, - (error, stdout, stderr) => { - if (error) { - this.logger.error(`got unexpected error from onepass:`, { - section: 'onePassNonce', - name: 'getOnePassNonce', - }) - return - } - if (stderr) { - this.logger.error( - `got unexpected error (from the stderr) from onepass`, - { - section: 'onePassNonce', - name: 'getOnePassNonce', - } - ) - return - } - const items = JSON.parse(stdout) - let latestNonce = -1 - this.logger.debug(`items in vault '${account.vault}':`) - for (const item of items) { - const title = item['title'] - this.logger.debug(`- ${title}`) - if (title.startsWith('ready-') && title.endsWith('.json')) { - const nonce = parseInt(title.substring(6, title.length - 5), 10) - if (nonce > latestNonce) { - latestNonce = nonce - } - } - } - this.metrics.latestPreSignedPauseNonce.set( - { address: account.safeAddress, nickname: account.nickname }, - latestNonce - ) - this.logger.debug(`latestNonce: ${latestNonce}`) - } - ) - } catch (err) { - this.logger.error(`got unexpected error from onepass`, { - section: 'onePassNonce', - name: 'getOnePassNonce', - err, - }) - this.metrics.unexpectedRpcErrors.inc({ - section: 'onePassNonce', - name: 'getOnePassNonce', - }) - } - } - - private async getSafeNonce(account: { - nickname: string - safeAddress: string - optimismPortalAddress: string - vault: string - }) { - try { - const safeContract = new ethers.Contract( - account.safeAddress, - Safe.abi, - this.options.rpc - ) - const safeNonce = await safeContract.nonce() - this.logger.info(`got nonce`, { - address: account.safeAddress, - nickname: account.nickname, - nonce: safeNonce.toString(), - }) - - this.metrics.safeNonce.set( - { address: account.safeAddress, nickname: account.nickname }, - parseInt(safeNonce.toString(), 10) - ) - } catch (err) { - this.logger.error(`got unexpected RPC error`, { - section: 'safeNonce', - name: 'getSafeNonce', - err, - }) - this.metrics.unexpectedRpcErrors.inc({ - section: 'safeNonce', - name: 'getSafeNonce', - }) - } - } -} - -if (require.main === module) { - const service = new MultisigMonService() - service.run() -} diff --git a/packages/chain-mon/package.json b/packages/chain-mon/package.json deleted file mode 100644 index 31b529dd5289..000000000000 --- a/packages/chain-mon/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "private": true, - "name": "@eth-optimism/chain-mon", - "version": "0.6.6", - "description": "[Optimism] Chain monitoring services", - "main": "dist/index", - "types": "dist/index", - "files": [ - "dist/*" - ], - "scripts": { - "dev:balance-mon": "tsx watch ./internal/balance-mon/service.ts", - "dev:fault-mon": "tsx watch ./src/fault-mon/service.ts", - "dev:multisig-mon": "tsx watch ./internal/multisig-mon/service.ts", - "dev:replica-mon": "tsx watch ./contrib/replica-mon/service.ts", - "dev:wallet-mon": "tsx watch ./contrib/wallet-mon/service.ts", - "dev:wd-mon": "tsx watch ./src/wd-mon/service.ts", - "dev:faultproof-wd-mon": "tsx ./src/faultproof-wd-mon/service.ts", - "dev:initialized-upgraded-mon": "tsx watch ./contrib/initialized-upgraded-mon/service.ts", - "start:balance-mon": "tsx ./internal/balance-mon/service.ts", - "start:fault-mon": "tsx ./src/fault-mon/service.ts", - "start:multisig-mon": "tsx ./internal/multisig-mon/service.ts", - "start:replica-mon": "tsx ./contrib/replica-mon/service.ts", - "start:wallet-mon": "tsx ./contrib/wallet-mon/service.ts", - "start:wd-mon": "tsx ./src/wd-mon/service.ts", - "start:faultproof-wd-mon": "tsx ./src/faultproof-wd-mon/service.ts", - "start:initialized-upgraded-mon": "tsx ./contrib/initialized-upgraded-mon/service.ts", - "test": "hardhat test", - "build": "tsc -p ./tsconfig.json", - "clean": "rimraf dist/ ./tsconfig.tsbuildinfo", - "lint": "pnpm lint:fix && pnpm lint:check", - "lint:fix": "pnpm lint:check --fix", - "lint:check": "eslint . --max-warnings=0" - }, - "keywords": [ - "optimism", - "ethereum", - "monitoring" - ], - "homepage": "https://github.com/ethereum-optimism/optimism/tree/develop/packages/chain-mon#readme", - "license": "MIT", - "author": "Optimism PBC", - "repository": { - "type": "git", - "url": "https://github.com/ethereum-optimism/optimism.git" - }, - "dependencies": { - "@eth-optimism/common-ts": "^0.8.9", - "@eth-optimism/contracts-bedrock": "workspace:*", - "@eth-optimism/contracts-periphery": "1.0.8", - "@eth-optimism/core-utils": "^0.13.2", - "@eth-optimism/sdk": "^3.3.2", - "@types/dateformat": "^5.0.0", - "chai-as-promised": "^7.1.1", - "dateformat": "^4.5.1", - "dotenv": "^16.4.5", - "ethers": "^5.7.2" - }, - "devDependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@nomiclabs/hardhat-waffle": "^2.0.6", - "hardhat": "^2.20.1", - "ts-node": "^10.9.2", - "tsx": "^4.16.2" - } -} diff --git a/packages/chain-mon/src/abi/IGnosisSafe.0.8.19.json b/packages/chain-mon/src/abi/IGnosisSafe.0.8.19.json deleted file mode 100644 index 2153157f3871..000000000000 --- a/packages/chain-mon/src/abi/IGnosisSafe.0.8.19.json +++ /dev/null @@ -1,6991 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "AddedOwner", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "approvedHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ApproveHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "guard", - "type": "address" - } - ], - "name": "ChangedGuard", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "threshold", - "type": "uint256" - } - ], - "name": "ChangedThreshold", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "RemovedOwner", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SafeReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "initiator", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "owners", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "threshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "initializer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "fallbackHandler", - "type": "address" - } - ], - "name": "SafeSetup", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - } - ], - "name": "SignMsg", - "type": "event" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "name": "addOwnerWithThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hashToApprove", - "type": "bytes32" - } - ], - "name": "approveHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "approvedHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "name": "changeThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "requiredSignatures", - "type": "uint256" - } - ], - "name": "checkNSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getOwners", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "getStorageAt", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThreshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "name": "removeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guard", - "type": "address" - } - ], - "name": "setGuard", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_owners", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "fallbackHandler", - "type": "address" - }, - { - "internalType": "address", - "name": "paymentToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "payment", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymentReceiver", - "type": "address" - } - ], - "name": "setup", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "signedMessages", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "calldataPayload", - "type": "bytes" - } - ], - "name": "simulateAndRevert", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "swapOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x", - "sourceMap": "", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x", - "sourceMap": "", - "linkReferences": {} - }, - "methodIdentifiers": { - "VERSION()": "ffa1ad74", - "addOwnerWithThreshold(address,uint256)": "0d582f13", - "approveHash(bytes32)": "d4d9bdcd", - "approvedHashes(address,bytes32)": "7d832974", - "changeThreshold(uint256)": "694e80c3", - "checkNSignatures(bytes32,bytes,bytes,uint256)": "12fb68e0", - "checkSignatures(bytes32,bytes,bytes)": "934f3a11", - "disableModule(address,address)": "e009cfde", - "domainSeparator()": "f698da25", - "enableModule(address)": "610b5925", - "encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)": "e86637db", - "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)": "6a761202", - "execTransactionFromModule(address,uint256,bytes,uint8)": "468721a7", - "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": "5229073f", - "getChainId()": "3408e470", - "getModulesPaginated(address,uint256)": "cc2f8452", - "getOwners()": "a0e67e2b", - "getStorageAt(uint256,uint256)": "5624b25b", - "getThreshold()": "e75235b8", - "getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)": "d8d11f78", - "isModuleEnabled(address)": "2d9ad53d", - "isOwner(address)": "2f54bf6e", - "nonce()": "affed0e0", - "removeOwner(address,address,uint256)": "f8dc5dd9", - "requiredTxGas(address,uint256,bytes,uint8)": "c4ca3a9c", - "setFallbackHandler(address)": "f08a0323", - "setGuard(address)": "e19a9dd9", - "setup(address[],uint256,address,bytes,address,address,uint256,address)": "b63e800d", - "signedMessages(bytes32)": "5ae6bd37", - "simulateAndRevert(address,bytes)": "b4faba09", - "swapOwner(address,address,address)": "e318b52b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AddedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvedHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ApproveHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"ChangedFallbackHandler\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"ChangedGuard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ChangedThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"DisabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemovedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"SafeSetup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignMsg\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"addOwnerWithThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashToApprove\",\"type\":\"bytes32\"}],\"name\":\"approveHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"approvedHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"changeThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredSignatures\",\"type\":\"uint256\"}],\"name\":\"checkNSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"disableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"encodeTransactionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"execTransaction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"getTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isModuleEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"requiredTxGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"setGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"swapOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"IGnosisSafe - Gnosis Safe Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"scripts/interfaces/IGnosisSafe.sol\":\"IGnosisSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@cwia/=lib/clones-with-immutable-args/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"scripts/interfaces/IGnosisSafe.sol\":{\"keccak256\":\"0xb9a55c98ef4d6a18260d6432f633a4bd6c5f540bfa80c4dc89c5ec33fd9aeec5\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://e953fc0cb723a9197006697e372f1729af1de1860a9845f2574f98aa9add72aa\",\"dweb:/ipfs/QmTdBba1DFqPNcaBmEFDSN8JmR7xPKwWno2vqnhmBjoGMD\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.19+commit.7dd6d404" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "AddedOwner", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "approvedHash", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "ApproveHash", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ChangedFallbackHandler", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guard", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ChangedGuard", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "threshold", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ChangedThreshold", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DisabledModule", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "EnabledModule", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "payment", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutionFailure", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "ExecutionFromModuleFailure", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "ExecutionFromModuleSuccess", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "payment", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutionSuccess", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "RemovedOwner", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "SafeReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "initiator", - "type": "address", - "indexed": true - }, - { - "internalType": "address[]", - "name": "owners", - "type": "address[]", - "indexed": false - }, - { - "internalType": "uint256", - "name": "threshold", - "type": "uint256", - "indexed": false - }, - { - "internalType": "address", - "name": "initializer", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "fallbackHandler", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SafeSetup", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "SignMsg", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addOwnerWithThreshold" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hashToApprove", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approveHash" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "approvedHashes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "changeThreshold" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "requiredSignatures", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "checkNSignatures" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "checkSignatures" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "disableModule" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "enableModule" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getOwners", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getStorageAt", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getThreshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeOwner" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setFallbackHandler" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guard", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setGuard" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_owners", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_threshold", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "address", - "name": "fallbackHandler", - "type": "address" - }, - { - "internalType": "address", - "name": "paymentToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "payment", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymentReceiver", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setup" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "signedMessages", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "calldataPayload", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "simulateAndRevert" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "swapOwner" - } - ], - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@cwia/=lib/clones-with-immutable-args/src/", - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@rari-capital/solmate/=lib/solmate/", - "clones-with-immutable-args/=lib/clones-with-immutable-args/src/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "safe-contracts/=lib/safe-contracts/contracts/", - "solmate/=lib/solmate/src/" - ], - "optimizer": { - "enabled": true, - "runs": 999999 - }, - "metadata": { - "bytecodeHash": "none" - }, - "compilationTarget": { - "scripts/interfaces/IGnosisSafe.sol": "IGnosisSafe" - }, - "libraries": {} - }, - "sources": { - "scripts/interfaces/IGnosisSafe.sol": { - "keccak256": "0xb9a55c98ef4d6a18260d6432f633a4bd6c5f540bfa80c4dc89c5ec33fd9aeec5", - "urls": [ - "bzz-raw://e953fc0cb723a9197006697e372f1729af1de1860a9845f2574f98aa9add72aa", - "dweb:/ipfs/QmTdBba1DFqPNcaBmEFDSN8JmR7xPKwWno2vqnhmBjoGMD" - ], - "license": "LGPL-3.0-only" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": {} - }, - "userdoc": { - "version": 1, - "kind": "user" - }, - "devdoc": { - "version": 1, - "kind": "dev", - "title": "IGnosisSafe - Gnosis Safe Interface" - }, - "ast": { - "absolutePath": "scripts/interfaces/IGnosisSafe.sol", - "id": 36017, - "exportedSymbols": { - "Enum": [ - 35629 - ], - "IGnosisSafe": [ - 36016 - ] - }, - "nodeType": "SourceUnit", - "src": "42:5070:43", - "nodes": [ - { - "id": 35624, - "nodeType": "PragmaDirective", - "src": "42:24:43", - "nodes": [], - "literals": [ - "solidity", - "^", - "0.8", - ".10" - ] - }, - { - "id": 35629, - "nodeType": "ContractDefinition", - "src": "172:88:43", - "nodes": [ - { - "id": 35628, - "nodeType": "EnumDefinition", - "src": "201:57:43", - "nodes": [], - "canonicalName": "Enum.Operation", - "members": [ - { - "id": 35626, - "name": "Call", - "nameLocation": "226:4:43", - "nodeType": "EnumValue", - "src": "226:4:43" - }, - { - "id": 35627, - "name": "DelegateCall", - "nameLocation": "240:12:43", - "nodeType": "EnumValue", - "src": "240:12:43" - } - ], - "name": "Operation", - "nameLocation": "206:9:43" - } - ], - "abstract": true, - "baseContracts": [], - "canonicalName": "Enum", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 35625, - "nodeType": "StructuredDocumentation", - "src": "68:104:43", - "text": "@title Enum - Collection of enums used in Safe contracts.\n @author Richard Meissner - @rmeissner" - }, - "fullyImplemented": true, - "linearizedBaseContracts": [ - 35629 - ], - "name": "Enum", - "nameLocation": "190:4:43", - "scope": 36017, - "usedErrors": [] - }, - { - "id": 36016, - "nodeType": "ContractDefinition", - "src": "309:4802:43", - "nodes": [ - { - "id": 35634, - "nodeType": "EventDefinition", - "src": "337:32:43", - "nodes": [], - "anonymous": false, - "eventSelector": "9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26", - "name": "AddedOwner", - "nameLocation": "343:10:43", - "parameters": { - "id": 35633, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35632, - "indexed": false, - "mutability": "mutable", - "name": "owner", - "nameLocation": "362:5:43", - "nodeType": "VariableDeclaration", - "scope": 35634, - "src": "354:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35631, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "354:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "353:15:43" - } - }, - { - "id": 35640, - "nodeType": "EventDefinition", - "src": "374:71:43", - "nodes": [], - "anonymous": false, - "eventSelector": "f2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c", - "name": "ApproveHash", - "nameLocation": "380:11:43", - "parameters": { - "id": 35639, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35636, - "indexed": true, - "mutability": "mutable", - "name": "approvedHash", - "nameLocation": "408:12:43", - "nodeType": "VariableDeclaration", - "scope": 35640, - "src": "392:28:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35635, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "392:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35638, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "438:5:43", - "nodeType": "VariableDeclaration", - "scope": 35640, - "src": "422:21:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35637, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "422:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "391:53:43" - } - }, - { - "id": 35644, - "nodeType": "EventDefinition", - "src": "450:46:43", - "nodes": [], - "anonymous": false, - "eventSelector": "5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0", - "name": "ChangedFallbackHandler", - "nameLocation": "456:22:43", - "parameters": { - "id": 35643, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35642, - "indexed": false, - "mutability": "mutable", - "name": "handler", - "nameLocation": "487:7:43", - "nodeType": "VariableDeclaration", - "scope": 35644, - "src": "479:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35641, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "479:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "478:17:43" - } - }, - { - "id": 35648, - "nodeType": "EventDefinition", - "src": "501:34:43", - "nodes": [], - "anonymous": false, - "eventSelector": "1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2", - "name": "ChangedGuard", - "nameLocation": "507:12:43", - "parameters": { - "id": 35647, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35646, - "indexed": false, - "mutability": "mutable", - "name": "guard", - "nameLocation": "528:5:43", - "nodeType": "VariableDeclaration", - "scope": 35648, - "src": "520:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35645, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "520:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "519:15:43" - } - }, - { - "id": 35652, - "nodeType": "EventDefinition", - "src": "540:42:43", - "nodes": [], - "anonymous": false, - "eventSelector": "610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93", - "name": "ChangedThreshold", - "nameLocation": "546:16:43", - "parameters": { - "id": 35651, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35650, - "indexed": false, - "mutability": "mutable", - "name": "threshold", - "nameLocation": "571:9:43", - "nodeType": "VariableDeclaration", - "scope": 35652, - "src": "563:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35649, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "563:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "562:19:43" - } - }, - { - "id": 35656, - "nodeType": "EventDefinition", - "src": "587:37:43", - "nodes": [], - "anonymous": false, - "eventSelector": "aab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276", - "name": "DisabledModule", - "nameLocation": "593:14:43", - "parameters": { - "id": 35655, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35654, - "indexed": false, - "mutability": "mutable", - "name": "module", - "nameLocation": "616:6:43", - "nodeType": "VariableDeclaration", - "scope": 35656, - "src": "608:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35653, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "608:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "607:16:43" - } - }, - { - "id": 35660, - "nodeType": "EventDefinition", - "src": "629:36:43", - "nodes": [], - "anonymous": false, - "eventSelector": "ecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440", - "name": "EnabledModule", - "nameLocation": "635:13:43", - "parameters": { - "id": 35659, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35658, - "indexed": false, - "mutability": "mutable", - "name": "module", - "nameLocation": "657:6:43", - "nodeType": "VariableDeclaration", - "scope": 35660, - "src": "649:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35657, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "648:16:43" - } - }, - { - "id": 35666, - "nodeType": "EventDefinition", - "src": "670:56:43", - "nodes": [], - "anonymous": false, - "eventSelector": "23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23", - "name": "ExecutionFailure", - "nameLocation": "676:16:43", - "parameters": { - "id": 35665, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35662, - "indexed": false, - "mutability": "mutable", - "name": "txHash", - "nameLocation": "701:6:43", - "nodeType": "VariableDeclaration", - "scope": 35666, - "src": "693:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35661, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "693:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35664, - "indexed": false, - "mutability": "mutable", - "name": "payment", - "nameLocation": "717:7:43", - "nodeType": "VariableDeclaration", - "scope": 35666, - "src": "709:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35663, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "709:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "692:33:43" - } - }, - { - "id": 35670, - "nodeType": "EventDefinition", - "src": "731:57:43", - "nodes": [], - "anonymous": false, - "eventSelector": "acd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375", - "name": "ExecutionFromModuleFailure", - "nameLocation": "737:26:43", - "parameters": { - "id": 35669, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35668, - "indexed": true, - "mutability": "mutable", - "name": "module", - "nameLocation": "780:6:43", - "nodeType": "VariableDeclaration", - "scope": 35670, - "src": "764:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35667, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "764:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "763:24:43" - } - }, - { - "id": 35674, - "nodeType": "EventDefinition", - "src": "793:57:43", - "nodes": [], - "anonymous": false, - "eventSelector": "6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", - "name": "ExecutionFromModuleSuccess", - "nameLocation": "799:26:43", - "parameters": { - "id": 35673, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35672, - "indexed": true, - "mutability": "mutable", - "name": "module", - "nameLocation": "842:6:43", - "nodeType": "VariableDeclaration", - "scope": 35674, - "src": "826:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35671, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "826:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "825:24:43" - } - }, - { - "id": 35680, - "nodeType": "EventDefinition", - "src": "855:56:43", - "nodes": [], - "anonymous": false, - "eventSelector": "442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e", - "name": "ExecutionSuccess", - "nameLocation": "861:16:43", - "parameters": { - "id": 35679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35676, - "indexed": false, - "mutability": "mutable", - "name": "txHash", - "nameLocation": "886:6:43", - "nodeType": "VariableDeclaration", - "scope": 35680, - "src": "878:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35675, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "878:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35678, - "indexed": false, - "mutability": "mutable", - "name": "payment", - "nameLocation": "902:7:43", - "nodeType": "VariableDeclaration", - "scope": 35680, - "src": "894:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "894:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "877:33:43" - } - }, - { - "id": 35684, - "nodeType": "EventDefinition", - "src": "916:34:43", - "nodes": [], - "anonymous": false, - "eventSelector": "f8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf", - "name": "RemovedOwner", - "nameLocation": "922:12:43", - "parameters": { - "id": 35683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35682, - "indexed": false, - "mutability": "mutable", - "name": "owner", - "nameLocation": "943:5:43", - "nodeType": "VariableDeclaration", - "scope": 35684, - "src": "935:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "935:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "934:15:43" - } - }, - { - "id": 35690, - "nodeType": "EventDefinition", - "src": "955:58:43", - "nodes": [], - "anonymous": false, - "eventSelector": "3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d", - "name": "SafeReceived", - "nameLocation": "961:12:43", - "parameters": { - "id": 35689, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35686, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "990:6:43", - "nodeType": "VariableDeclaration", - "scope": 35690, - "src": "974:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35685, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "974:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35688, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "1006:5:43", - "nodeType": "VariableDeclaration", - "scope": 35690, - "src": "998:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35687, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "998:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "973:39:43" - } - }, - { - "id": 35703, - "nodeType": "EventDefinition", - "src": "1018:140:43", - "nodes": [], - "anonymous": false, - "eventSelector": "141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", - "name": "SafeSetup", - "nameLocation": "1024:9:43", - "parameters": { - "id": 35702, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35692, - "indexed": true, - "mutability": "mutable", - "name": "initiator", - "nameLocation": "1059:9:43", - "nodeType": "VariableDeclaration", - "scope": 35703, - "src": "1043:25:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35691, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1043:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35695, - "indexed": false, - "mutability": "mutable", - "name": "owners", - "nameLocation": "1080:6:43", - "nodeType": "VariableDeclaration", - "scope": 35703, - "src": "1070:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 35693, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1070:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 35694, - "nodeType": "ArrayTypeName", - "src": "1070:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35697, - "indexed": false, - "mutability": "mutable", - "name": "threshold", - "nameLocation": "1096:9:43", - "nodeType": "VariableDeclaration", - "scope": 35703, - "src": "1088:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35696, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1088:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35699, - "indexed": false, - "mutability": "mutable", - "name": "initializer", - "nameLocation": "1115:11:43", - "nodeType": "VariableDeclaration", - "scope": 35703, - "src": "1107:19:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35698, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1107:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35701, - "indexed": false, - "mutability": "mutable", - "name": "fallbackHandler", - "nameLocation": "1136:15:43", - "nodeType": "VariableDeclaration", - "scope": 35703, - "src": "1128:23:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35700, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1128:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1033:124:43" - } - }, - { - "id": 35707, - "nodeType": "EventDefinition", - "src": "1163:39:43", - "nodes": [], - "anonymous": false, - "eventSelector": "e7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4", - "name": "SignMsg", - "nameLocation": "1169:7:43", - "parameters": { - "id": 35706, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35705, - "indexed": true, - "mutability": "mutable", - "name": "msgHash", - "nameLocation": "1193:7:43", - "nodeType": "VariableDeclaration", - "scope": 35707, - "src": "1177:23:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35704, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1177:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1176:25:43" - } - }, - { - "id": 35712, - "nodeType": "FunctionDefinition", - "src": "1208:57:43", - "nodes": [], - "functionSelector": "ffa1ad74", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "VERSION", - "nameLocation": "1217:7:43", - "parameters": { - "id": 35708, - "nodeType": "ParameterList", - "parameters": [], - "src": "1224:2:43" - }, - "returnParameters": { - "id": 35711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35710, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35712, - "src": "1250:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 35709, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1250:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1249:15:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35719, - "nodeType": "FunctionDefinition", - "src": "1270:75:43", - "nodes": [], - "functionSelector": "0d582f13", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addOwnerWithThreshold", - "nameLocation": "1279:21:43", - "parameters": { - "id": 35717, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35714, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1309:5:43", - "nodeType": "VariableDeclaration", - "scope": 35719, - "src": "1301:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35713, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1301:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35716, - "mutability": "mutable", - "name": "_threshold", - "nameLocation": "1324:10:43", - "nodeType": "VariableDeclaration", - "scope": 35719, - "src": "1316:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35715, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1316:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1300:35:43" - }, - "returnParameters": { - "id": 35718, - "nodeType": "ParameterList", - "parameters": [], - "src": "1344:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35724, - "nodeType": "FunctionDefinition", - "src": "1350:53:43", - "nodes": [], - "functionSelector": "d4d9bdcd", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveHash", - "nameLocation": "1359:11:43", - "parameters": { - "id": 35722, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35721, - "mutability": "mutable", - "name": "hashToApprove", - "nameLocation": "1379:13:43", - "nodeType": "VariableDeclaration", - "scope": 35724, - "src": "1371:21:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35720, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1371:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1370:23:43" - }, - "returnParameters": { - "id": 35723, - "nodeType": "ParameterList", - "parameters": [], - "src": "1402:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35733, - "nodeType": "FunctionDefinition", - "src": "1408:74:43", - "nodes": [], - "functionSelector": "7d832974", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approvedHashes", - "nameLocation": "1417:14:43", - "parameters": { - "id": 35729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35726, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35733, - "src": "1432:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1432:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35728, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35733, - "src": "1441:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35727, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1441:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1431:18:43" - }, - "returnParameters": { - "id": 35732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35731, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35733, - "src": "1473:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35730, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1473:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1472:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35738, - "nodeType": "FunctionDefinition", - "src": "1487:54:43", - "nodes": [], - "functionSelector": "694e80c3", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "changeThreshold", - "nameLocation": "1496:15:43", - "parameters": { - "id": 35736, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35735, - "mutability": "mutable", - "name": "_threshold", - "nameLocation": "1520:10:43", - "nodeType": "VariableDeclaration", - "scope": 35738, - "src": "1512:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35734, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1512:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1511:20:43" - }, - "returnParameters": { - "id": 35737, - "nodeType": "ParameterList", - "parameters": [], - "src": "1540:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35749, - "nodeType": "FunctionDefinition", - "src": "1546:184:43", - "nodes": [], - "functionSelector": "12fb68e0", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkNSignatures", - "nameLocation": "1555:16:43", - "parameters": { - "id": 35747, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35740, - "mutability": "mutable", - "name": "dataHash", - "nameLocation": "1589:8:43", - "nodeType": "VariableDeclaration", - "scope": 35749, - "src": "1581:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35739, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1581:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35742, - "mutability": "mutable", - "name": "data", - "nameLocation": "1620:4:43", - "nodeType": "VariableDeclaration", - "scope": 35749, - "src": "1607:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35741, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1607:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35744, - "mutability": "mutable", - "name": "signatures", - "nameLocation": "1647:10:43", - "nodeType": "VariableDeclaration", - "scope": 35749, - "src": "1634:23:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35743, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1634:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35746, - "mutability": "mutable", - "name": "requiredSignatures", - "nameLocation": "1675:18:43", - "nodeType": "VariableDeclaration", - "scope": 35749, - "src": "1667:26:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35745, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1667:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1571:128:43" - }, - "returnParameters": { - "id": 35748, - "nodeType": "ParameterList", - "parameters": [], - "src": "1729:0:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35758, - "nodeType": "FunctionDefinition", - "src": "1735:101:43", - "nodes": [], - "functionSelector": "934f3a11", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkSignatures", - "nameLocation": "1744:15:43", - "parameters": { - "id": 35756, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35751, - "mutability": "mutable", - "name": "dataHash", - "nameLocation": "1768:8:43", - "nodeType": "VariableDeclaration", - "scope": 35758, - "src": "1760:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35750, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1760:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35753, - "mutability": "mutable", - "name": "data", - "nameLocation": "1791:4:43", - "nodeType": "VariableDeclaration", - "scope": 35758, - "src": "1778:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35752, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1778:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35755, - "mutability": "mutable", - "name": "signatures", - "nameLocation": "1810:10:43", - "nodeType": "VariableDeclaration", - "scope": 35758, - "src": "1797:23:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35754, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1797:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1759:62:43" - }, - "returnParameters": { - "id": 35757, - "nodeType": "ParameterList", - "parameters": [], - "src": "1835:0:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35765, - "nodeType": "FunctionDefinition", - "src": "1841:68:43", - "nodes": [], - "functionSelector": "e009cfde", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "disableModule", - "nameLocation": "1850:13:43", - "parameters": { - "id": 35763, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35760, - "mutability": "mutable", - "name": "prevModule", - "nameLocation": "1872:10:43", - "nodeType": "VariableDeclaration", - "scope": 35765, - "src": "1864:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1864:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35762, - "mutability": "mutable", - "name": "module", - "nameLocation": "1892:6:43", - "nodeType": "VariableDeclaration", - "scope": 35765, - "src": "1884:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35761, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1884:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1863:36:43" - }, - "returnParameters": { - "id": 35764, - "nodeType": "ParameterList", - "parameters": [], - "src": "1908:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35770, - "nodeType": "FunctionDefinition", - "src": "1914:59:43", - "nodes": [], - "functionSelector": "f698da25", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "domainSeparator", - "nameLocation": "1923:15:43", - "parameters": { - "id": 35766, - "nodeType": "ParameterList", - "parameters": [], - "src": "1938:2:43" - }, - "returnParameters": { - "id": 35769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35768, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35770, - "src": "1964:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35767, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1964:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1963:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35775, - "nodeType": "FunctionDefinition", - "src": "1978:47:43", - "nodes": [], - "functionSelector": "610b5925", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "enableModule", - "nameLocation": "1987:12:43", - "parameters": { - "id": 35773, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35772, - "mutability": "mutable", - "name": "module", - "nameLocation": "2008:6:43", - "nodeType": "VariableDeclaration", - "scope": 35775, - "src": "2000:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35771, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2000:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1999:16:43" - }, - "returnParameters": { - "id": 35774, - "nodeType": "ParameterList", - "parameters": [], - "src": "2024:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35801, - "nodeType": "FunctionDefinition", - "src": "2030:362:43", - "nodes": [], - "functionSelector": "e86637db", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "encodeTransactionData", - "nameLocation": "2039:21:43", - "parameters": { - "id": 35797, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35777, - "mutability": "mutable", - "name": "to", - "nameLocation": "2078:2:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2070:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35776, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2070:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35779, - "mutability": "mutable", - "name": "value", - "nameLocation": "2098:5:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2090:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35778, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2090:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35781, - "mutability": "mutable", - "name": "data", - "nameLocation": "2126:4:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2113:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35780, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2113:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35784, - "mutability": "mutable", - "name": "operation", - "nameLocation": "2155:9:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2140:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35783, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35782, - "name": "Enum.Operation", - "nameLocations": [ - "2140:4:43", - "2145:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "2140:14:43" - }, - "referencedDeclaration": 35628, - "src": "2140:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35786, - "mutability": "mutable", - "name": "safeTxGas", - "nameLocation": "2182:9:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2174:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35785, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2174:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35788, - "mutability": "mutable", - "name": "baseGas", - "nameLocation": "2209:7:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2201:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35787, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2201:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35790, - "mutability": "mutable", - "name": "gasPrice", - "nameLocation": "2234:8:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2226:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35789, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2226:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35792, - "mutability": "mutable", - "name": "gasToken", - "nameLocation": "2260:8:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2252:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35791, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2252:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35794, - "mutability": "mutable", - "name": "refundReceiver", - "nameLocation": "2286:14:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2278:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35793, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2278:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35796, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "2318:6:43", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2310:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35795, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2310:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2060:270:43" - }, - "returnParameters": { - "id": 35800, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35799, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35801, - "src": "2378:12:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35798, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2378:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2377:14:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35827, - "nodeType": "FunctionDefinition", - "src": "2397:368:43", - "nodes": [], - "functionSelector": "6a761202", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "execTransaction", - "nameLocation": "2406:15:43", - "parameters": { - "id": 35823, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35803, - "mutability": "mutable", - "name": "to", - "nameLocation": "2439:2:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2431:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35802, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2431:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35805, - "mutability": "mutable", - "name": "value", - "nameLocation": "2459:5:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2451:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35804, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2451:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35807, - "mutability": "mutable", - "name": "data", - "nameLocation": "2487:4:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2474:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35806, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2474:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35810, - "mutability": "mutable", - "name": "operation", - "nameLocation": "2516:9:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2501:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35809, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35808, - "name": "Enum.Operation", - "nameLocations": [ - "2501:4:43", - "2506:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "2501:14:43" - }, - "referencedDeclaration": 35628, - "src": "2501:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35812, - "mutability": "mutable", - "name": "safeTxGas", - "nameLocation": "2543:9:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2535:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35811, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2535:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35814, - "mutability": "mutable", - "name": "baseGas", - "nameLocation": "2570:7:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2562:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35813, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2562:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35816, - "mutability": "mutable", - "name": "gasPrice", - "nameLocation": "2595:8:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2587:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35815, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2587:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35818, - "mutability": "mutable", - "name": "gasToken", - "nameLocation": "2621:8:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2613:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2613:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35820, - "mutability": "mutable", - "name": "refundReceiver", - "nameLocation": "2647:14:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2639:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2639:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35822, - "mutability": "mutable", - "name": "signatures", - "nameLocation": "2684:10:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2671:23:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35821, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2671:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2421:279:43" - }, - "returnParameters": { - "id": 35826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35825, - "mutability": "mutable", - "name": "success", - "nameLocation": "2756:7:43", - "nodeType": "VariableDeclaration", - "scope": 35827, - "src": "2751:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 35824, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2751:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2750:14:43" - }, - "scope": 36016, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35841, - "nodeType": "FunctionDefinition", - "src": "2770:193:43", - "nodes": [], - "functionSelector": "468721a7", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "execTransactionFromModule", - "nameLocation": "2779:25:43", - "parameters": { - "id": 35837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35829, - "mutability": "mutable", - "name": "to", - "nameLocation": "2822:2:43", - "nodeType": "VariableDeclaration", - "scope": 35841, - "src": "2814:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35828, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2814:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35831, - "mutability": "mutable", - "name": "value", - "nameLocation": "2842:5:43", - "nodeType": "VariableDeclaration", - "scope": 35841, - "src": "2834:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35830, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2834:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35833, - "mutability": "mutable", - "name": "data", - "nameLocation": "2870:4:43", - "nodeType": "VariableDeclaration", - "scope": 35841, - "src": "2857:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35832, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2857:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35836, - "mutability": "mutable", - "name": "operation", - "nameLocation": "2899:9:43", - "nodeType": "VariableDeclaration", - "scope": 35841, - "src": "2884:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35835, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35834, - "name": "Enum.Operation", - "nameLocations": [ - "2884:4:43", - "2889:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "2884:14:43" - }, - "referencedDeclaration": 35628, - "src": "2884:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - } - ], - "src": "2804:110:43" - }, - "returnParameters": { - "id": 35840, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35839, - "mutability": "mutable", - "name": "success", - "nameLocation": "2954:7:43", - "nodeType": "VariableDeclaration", - "scope": 35841, - "src": "2949:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 35838, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2949:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2948:14:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35857, - "nodeType": "FunctionDefinition", - "src": "2968:228:43", - "nodes": [], - "functionSelector": "5229073f", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "execTransactionFromModuleReturnData", - "nameLocation": "2977:35:43", - "parameters": { - "id": 35851, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35843, - "mutability": "mutable", - "name": "to", - "nameLocation": "3030:2:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3022:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35842, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3022:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35845, - "mutability": "mutable", - "name": "value", - "nameLocation": "3050:5:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3042:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35844, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3042:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35847, - "mutability": "mutable", - "name": "data", - "nameLocation": "3078:4:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3065:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35846, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3065:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35850, - "mutability": "mutable", - "name": "operation", - "nameLocation": "3107:9:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3092:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35849, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35848, - "name": "Enum.Operation", - "nameLocations": [ - "3092:4:43", - "3097:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "3092:14:43" - }, - "referencedDeclaration": 35628, - "src": "3092:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - } - ], - "src": "3012:110:43" - }, - "returnParameters": { - "id": 35856, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35853, - "mutability": "mutable", - "name": "success", - "nameLocation": "3162:7:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3157:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 35852, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3157:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35855, - "mutability": "mutable", - "name": "returnData", - "nameLocation": "3184:10:43", - "nodeType": "VariableDeclaration", - "scope": 35857, - "src": "3171:23:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35854, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3171:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3156:39:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35862, - "nodeType": "FunctionDefinition", - "src": "3201:54:43", - "nodes": [], - "functionSelector": "3408e470", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getChainId", - "nameLocation": "3210:10:43", - "parameters": { - "id": 35858, - "nodeType": "ParameterList", - "parameters": [], - "src": "3220:2:43" - }, - "returnParameters": { - "id": 35861, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35860, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35862, - "src": "3246:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35859, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3246:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3245:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35874, - "nodeType": "FunctionDefinition", - "src": "3260:169:43", - "nodes": [], - "functionSelector": "cc2f8452", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getModulesPaginated", - "nameLocation": "3269:19:43", - "parameters": { - "id": 35867, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35864, - "mutability": "mutable", - "name": "start", - "nameLocation": "3306:5:43", - "nodeType": "VariableDeclaration", - "scope": 35874, - "src": "3298:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35863, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3298:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35866, - "mutability": "mutable", - "name": "pageSize", - "nameLocation": "3329:8:43", - "nodeType": "VariableDeclaration", - "scope": 35874, - "src": "3321:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35865, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3321:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3288:55:43" - }, - "returnParameters": { - "id": 35873, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35870, - "mutability": "mutable", - "name": "array", - "nameLocation": "3408:5:43", - "nodeType": "VariableDeclaration", - "scope": 35874, - "src": "3391:22:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 35868, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3391:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 35869, - "nodeType": "ArrayTypeName", - "src": "3391:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35872, - "mutability": "mutable", - "name": "next", - "nameLocation": "3423:4:43", - "nodeType": "VariableDeclaration", - "scope": 35874, - "src": "3415:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35871, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3415:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3390:38:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35880, - "nodeType": "FunctionDefinition", - "src": "3434:62:43", - "nodes": [], - "functionSelector": "a0e67e2b", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getOwners", - "nameLocation": "3443:9:43", - "parameters": { - "id": 35875, - "nodeType": "ParameterList", - "parameters": [], - "src": "3452:2:43" - }, - "returnParameters": { - "id": 35879, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35878, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35880, - "src": "3478:16:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 35876, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3478:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 35877, - "nodeType": "ArrayTypeName", - "src": "3478:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "3477:18:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35889, - "nodeType": "FunctionDefinition", - "src": "3501:91:43", - "nodes": [], - "functionSelector": "5624b25b", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getStorageAt", - "nameLocation": "3510:12:43", - "parameters": { - "id": 35885, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35882, - "mutability": "mutable", - "name": "offset", - "nameLocation": "3531:6:43", - "nodeType": "VariableDeclaration", - "scope": 35889, - "src": "3523:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35881, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3523:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35884, - "mutability": "mutable", - "name": "length", - "nameLocation": "3547:6:43", - "nodeType": "VariableDeclaration", - "scope": 35889, - "src": "3539:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35883, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3539:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3522:32:43" - }, - "returnParameters": { - "id": 35888, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35887, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35889, - "src": "3578:12:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35886, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3578:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3577:14:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35894, - "nodeType": "FunctionDefinition", - "src": "3597:56:43", - "nodes": [], - "functionSelector": "e75235b8", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getThreshold", - "nameLocation": "3606:12:43", - "parameters": { - "id": 35890, - "nodeType": "ParameterList", - "parameters": [], - "src": "3618:2:43" - }, - "returnParameters": { - "id": 35893, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35892, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35894, - "src": "3644:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35891, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3644:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3643:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35920, - "nodeType": "FunctionDefinition", - "src": "3658:354:43", - "nodes": [], - "functionSelector": "d8d11f78", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getTransactionHash", - "nameLocation": "3667:18:43", - "parameters": { - "id": 35916, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35896, - "mutability": "mutable", - "name": "to", - "nameLocation": "3703:2:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3695:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35895, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3695:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35898, - "mutability": "mutable", - "name": "value", - "nameLocation": "3723:5:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3715:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35897, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3715:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35900, - "mutability": "mutable", - "name": "data", - "nameLocation": "3751:4:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3738:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35899, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3738:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35903, - "mutability": "mutable", - "name": "operation", - "nameLocation": "3780:9:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3765:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35902, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35901, - "name": "Enum.Operation", - "nameLocations": [ - "3765:4:43", - "3770:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "3765:14:43" - }, - "referencedDeclaration": 35628, - "src": "3765:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35905, - "mutability": "mutable", - "name": "safeTxGas", - "nameLocation": "3807:9:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3799:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35904, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3799:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35907, - "mutability": "mutable", - "name": "baseGas", - "nameLocation": "3834:7:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3826:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35906, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3826:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35909, - "mutability": "mutable", - "name": "gasPrice", - "nameLocation": "3859:8:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3851:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35908, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3851:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35911, - "mutability": "mutable", - "name": "gasToken", - "nameLocation": "3885:8:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3877:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35910, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3877:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35913, - "mutability": "mutable", - "name": "refundReceiver", - "nameLocation": "3911:14:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3903:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35912, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3903:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35915, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "3943:6:43", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "3935:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35914, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3935:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3685:270:43" - }, - "returnParameters": { - "id": 35919, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35918, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35920, - "src": "4003:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35917, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4003:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4002:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35927, - "nodeType": "FunctionDefinition", - "src": "4017:70:43", - "nodes": [], - "functionSelector": "2d9ad53d", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isModuleEnabled", - "nameLocation": "4026:15:43", - "parameters": { - "id": 35923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35922, - "mutability": "mutable", - "name": "module", - "nameLocation": "4050:6:43", - "nodeType": "VariableDeclaration", - "scope": 35927, - "src": "4042:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35921, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4042:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4041:16:43" - }, - "returnParameters": { - "id": 35926, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35925, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35927, - "src": "4081:4:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 35924, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4081:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4080:6:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35934, - "nodeType": "FunctionDefinition", - "src": "4092:61:43", - "nodes": [], - "functionSelector": "2f54bf6e", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isOwner", - "nameLocation": "4101:7:43", - "parameters": { - "id": 35930, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35929, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4117:5:43", - "nodeType": "VariableDeclaration", - "scope": 35934, - "src": "4109:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35928, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4109:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4108:15:43" - }, - "returnParameters": { - "id": 35933, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35932, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35934, - "src": "4147:4:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 35931, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4147:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4146:6:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35939, - "nodeType": "FunctionDefinition", - "src": "4158:49:43", - "nodes": [], - "functionSelector": "affed0e0", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nonce", - "nameLocation": "4167:5:43", - "parameters": { - "id": 35935, - "nodeType": "ParameterList", - "parameters": [], - "src": "4172:2:43" - }, - "returnParameters": { - "id": 35938, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35937, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35939, - "src": "4198:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35936, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4198:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4197:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 35948, - "nodeType": "FunctionDefinition", - "src": "4212:84:43", - "nodes": [], - "functionSelector": "f8dc5dd9", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "removeOwner", - "nameLocation": "4221:11:43", - "parameters": { - "id": 35946, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35941, - "mutability": "mutable", - "name": "prevOwner", - "nameLocation": "4241:9:43", - "nodeType": "VariableDeclaration", - "scope": 35948, - "src": "4233:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35940, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4233:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35943, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4260:5:43", - "nodeType": "VariableDeclaration", - "scope": 35948, - "src": "4252:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35942, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4252:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35945, - "mutability": "mutable", - "name": "_threshold", - "nameLocation": "4275:10:43", - "nodeType": "VariableDeclaration", - "scope": 35948, - "src": "4267:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35944, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4267:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4232:54:43" - }, - "returnParameters": { - "id": 35947, - "nodeType": "ParameterList", - "parameters": [], - "src": "4295:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35962, - "nodeType": "FunctionDefinition", - "src": "4301:176:43", - "nodes": [], - "functionSelector": "c4ca3a9c", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "requiredTxGas", - "nameLocation": "4310:13:43", - "parameters": { - "id": 35958, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35950, - "mutability": "mutable", - "name": "to", - "nameLocation": "4341:2:43", - "nodeType": "VariableDeclaration", - "scope": 35962, - "src": "4333:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35949, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4333:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35952, - "mutability": "mutable", - "name": "value", - "nameLocation": "4361:5:43", - "nodeType": "VariableDeclaration", - "scope": 35962, - "src": "4353:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35951, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4353:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35954, - "mutability": "mutable", - "name": "data", - "nameLocation": "4389:4:43", - "nodeType": "VariableDeclaration", - "scope": 35962, - "src": "4376:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35953, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4376:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35957, - "mutability": "mutable", - "name": "operation", - "nameLocation": "4418:9:43", - "nodeType": "VariableDeclaration", - "scope": 35962, - "src": "4403:24:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - }, - "typeName": { - "id": 35956, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 35955, - "name": "Enum.Operation", - "nameLocations": [ - "4403:4:43", - "4408:9:43" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 35628, - "src": "4403:14:43" - }, - "referencedDeclaration": 35628, - "src": "4403:14:43", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Operation_$35628", - "typeString": "enum Enum.Operation" - } - }, - "visibility": "internal" - } - ], - "src": "4323:110:43" - }, - "returnParameters": { - "id": 35961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35960, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35962, - "src": "4468:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35959, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4468:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4467:9:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35967, - "nodeType": "FunctionDefinition", - "src": "4482:54:43", - "nodes": [], - "functionSelector": "f08a0323", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setFallbackHandler", - "nameLocation": "4491:18:43", - "parameters": { - "id": 35965, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35964, - "mutability": "mutable", - "name": "handler", - "nameLocation": "4518:7:43", - "nodeType": "VariableDeclaration", - "scope": 35967, - "src": "4510:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35963, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4510:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4509:17:43" - }, - "returnParameters": { - "id": 35966, - "nodeType": "ParameterList", - "parameters": [], - "src": "4535:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35972, - "nodeType": "FunctionDefinition", - "src": "4541:42:43", - "nodes": [], - "functionSelector": "e19a9dd9", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setGuard", - "nameLocation": "4550:8:43", - "parameters": { - "id": 35970, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35969, - "mutability": "mutable", - "name": "guard", - "nameLocation": "4567:5:43", - "nodeType": "VariableDeclaration", - "scope": 35972, - "src": "4559:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35968, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4559:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4558:15:43" - }, - "returnParameters": { - "id": 35971, - "nodeType": "ParameterList", - "parameters": [], - "src": "4582:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35992, - "nodeType": "FunctionDefinition", - "src": "4588:268:43", - "nodes": [], - "functionSelector": "b63e800d", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setup", - "nameLocation": "4597:5:43", - "parameters": { - "id": 35990, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35975, - "mutability": "mutable", - "name": "_owners", - "nameLocation": "4629:7:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4612:24:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 35973, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4612:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 35974, - "nodeType": "ArrayTypeName", - "src": "4612:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35977, - "mutability": "mutable", - "name": "_threshold", - "nameLocation": "4654:10:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4646:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35976, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4646:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35979, - "mutability": "mutable", - "name": "to", - "nameLocation": "4682:2:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4674:10:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35978, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4674:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35981, - "mutability": "mutable", - "name": "data", - "nameLocation": "4707:4:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4694:17:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 35980, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4694:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35983, - "mutability": "mutable", - "name": "fallbackHandler", - "nameLocation": "4729:15:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4721:23:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35982, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4721:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35985, - "mutability": "mutable", - "name": "paymentToken", - "nameLocation": "4762:12:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4754:20:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35984, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4754:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35987, - "mutability": "mutable", - "name": "payment", - "nameLocation": "4792:7:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4784:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35986, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4784:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 35989, - "mutability": "mutable", - "name": "paymentReceiver", - "nameLocation": "4817:15:43", - "nodeType": "VariableDeclaration", - "scope": 35992, - "src": "4809:23:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 35988, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4809:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4602:236:43" - }, - "returnParameters": { - "id": 35991, - "nodeType": "ParameterList", - "parameters": [], - "src": "4855:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 35999, - "nodeType": "FunctionDefinition", - "src": "4861:65:43", - "nodes": [], - "functionSelector": "5ae6bd37", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "signedMessages", - "nameLocation": "4870:14:43", - "parameters": { - "id": 35995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35994, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35999, - "src": "4885:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 35993, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4885:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4884:9:43" - }, - "returnParameters": { - "id": 35998, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35997, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 35999, - "src": "4917:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 35996, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4917:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4916:9:43" - }, - "scope": 36016, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 36006, - "nodeType": "FunctionDefinition", - "src": "4931:90:43", - "nodes": [], - "functionSelector": "b4faba09", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "simulateAndRevert", - "nameLocation": "4940:17:43", - "parameters": { - "id": 36004, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 36001, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "4966:14:43", - "nodeType": "VariableDeclaration", - "scope": 36006, - "src": "4958:22:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 36000, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4958:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 36003, - "mutability": "mutable", - "name": "calldataPayload", - "nameLocation": "4995:15:43", - "nodeType": "VariableDeclaration", - "scope": 36006, - "src": "4982:28:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 36002, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4982:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4957:54:43" - }, - "returnParameters": { - "id": 36005, - "nodeType": "ParameterList", - "parameters": [], - "src": "5020:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 36015, - "nodeType": "FunctionDefinition", - "src": "5026:83:43", - "nodes": [], - "functionSelector": "e318b52b", - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "swapOwner", - "nameLocation": "5035:9:43", - "parameters": { - "id": 36013, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 36008, - "mutability": "mutable", - "name": "prevOwner", - "nameLocation": "5053:9:43", - "nodeType": "VariableDeclaration", - "scope": 36015, - "src": "5045:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 36007, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5045:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 36010, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "5072:8:43", - "nodeType": "VariableDeclaration", - "scope": 36015, - "src": "5064:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 36009, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5064:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 36012, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "5090:8:43", - "nodeType": "VariableDeclaration", - "scope": 36015, - "src": "5082:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 36011, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5082:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5044:55:43" - }, - "returnParameters": { - "id": 36014, - "nodeType": "ParameterList", - "parameters": [], - "src": "5108:0:43" - }, - "scope": 36016, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [], - "canonicalName": "IGnosisSafe", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 35630, - "nodeType": "StructuredDocumentation", - "src": "262:47:43", - "text": "@title IGnosisSafe - Gnosis Safe Interface" - }, - "fullyImplemented": false, - "linearizedBaseContracts": [ - 36016 - ], - "name": "IGnosisSafe", - "nameLocation": "319:11:43", - "scope": 36017, - "usedErrors": [] - } - ], - "license": "LGPL-3.0-only" - }, - "id": 43 -} \ No newline at end of file diff --git a/packages/chain-mon/src/abi/OptimismPortal.json b/packages/chain-mon/src/abi/OptimismPortal.json deleted file mode 100644 index e6f1d9048fea..000000000000 --- a/packages/chain-mon/src/abi/OptimismPortal.json +++ /dev/null @@ -1,11338 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "version", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "opaqueData", - "type": "bytes" - } - ], - "name": "TransactionDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "WithdrawalFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "WithdrawalProven", - "type": "event" - }, - { - "inputs": [], - "name": "GUARDIAN", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_ORACLE", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SYSTEM_CONFIG", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "depositTransaction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "donateETH", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - } - ], - "name": "finalizeWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "finalizedWithdrawals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "_l2Oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract SystemConfig", - "name": "_systemConfig", - "type": "address" - }, - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - } - ], - "name": "isOutputFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Oracle", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_byteCount", - "type": "uint64" - } - ], - "name": "minimumGasLimit", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "prevBaseFee", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "prevBoughtGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "prevBlockNum", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "proveWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenWithdrawals", - "outputs": [ - { - "internalType": "bytes32", - "name": "outputRoot", - "type": "bytes32" - }, - { - "internalType": "uint128", - "name": "timestamp", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "l2OutputIndex", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "systemConfig", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506200002260008080600162000028565b62000224565b600054600390610100900460ff161580156200004b575060005460ff8083169116105b620000b45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100908117909155603280546001600160a01b031990811661dead1790915560358054603680546001600160a01b0389811691861691909117909155603780548a831695169490941790935585151592891690930260ff19166001600160a81b0319909316929092171790556200013962000181565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600054610100900460ff16620001ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000ab565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b61545c80620002346000396000f3fe60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "sourceMap": "1135:20265:110:-:0;;;4982:219;;;;;;;;;-1:-1:-1;5006:188:110;5065:1;;;5179:4;5006:10;:188::i;:::-;1135:20265;;5491:423;4396:13:36;;2762:1:158;;4396:13:36;;;;;4395:14;:40;;;;-1:-1:-1;4413:12:36;;:22;;;;:12;;:22;4395:40;4387:99;;;;-1:-1:-1;;;4387:99:36;;216:2:285;4387:99:36;;;198:21:285;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:285;;;338:44;399:19;;4387:99:36;;;;;;;;;4496:12;:22;;-1:-1:-1;;4528:20:36;4496:22;;;4528:20;4496:22;4528:20;;;;;;5710:8:110::1;:38:::0;;-1:-1:-1;;;;;;5710:38:110;;::::1;1337:42:158;5710:38:110;::::0;;;5758:8:::1;:20:::0;;5788:12:::1;:28:::0;;-1:-1:-1;;;;;5788:28:110;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5826:8:::1;:20:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;5856:16;::::1;;5758:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;5856:16:110;-1:-1:-1;;;;;;5856:16:110;;;;;;;::::1;::::0;;5882:25:::1;:23;:25::i;:::-;4585:5:36::0;4569:21;;-1:-1:-1;;4569:21:36;;;4605:20;;601:4:285;589:17;;571:36;;4605:20:36;;559:2:285;544:18;4605:20:36;;;;;;;5491:423:110;;;;;:::o;8362:180:112:-;4888:13:36;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:36;;820:2:285;4880:69:36;;;802:21:285;859:2;839:18;;;832:30;898:34;878:18;;;871:62;-1:-1:-1;;;949:18:285;;;942:41;1000:19;;4880:69:36;618:407:285;4880:69:36;8442:93:112::1;::::0;;::::1;::::0;::::1;::::0;;8472:6:::1;8442:93:::0;;;-1:-1:-1;8442:93:112::1;::::0;::::1;::::0;8519:12:::1;-1:-1:-1::0;;;;;8442:93:112::1;::::0;;;;;;;-1:-1:-1;;;8433:102:112::1;;:6;:102:::0;8362:180::o;618:407:285:-;1135:20265:110;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "sourceMap": "1135:20265:110:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7915:86;7934:10;7946:9;1866:7;7984:5;7991:9;;;;;;;;;;;;7915:18;:86::i;:::-;1135:20265;;;;;5989:92;;;;;;;;;;-1:-1:-1;6066:8:110;;;;;;;5989:92;;;214:42:285;202:55;;;184:74;;172:2;157:18;5989:92:110;;;;;;;;2856:32;;;;;;;;;;-1:-1:-1;2856:32:110;;;;;;;;6664:180;;;;;;;;;;;;;:::i;3007:23::-;;;;;;;;;;-1:-1:-1;3007:23:110;;;;;;;;9088:3746;;;;;;;;;;-1:-1:-1;9088:3746:110;;;;;:::i;:::-;;:::i;4878:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2618:18::-;;;;;;;;;;-1:-1:-1;2618:18:110;;;;;;;;;;;5224:14:285;;5217:22;5199:41;;5187:2;5172:18;2618::110;5059:187:285;20785:180:110;;;;;;;;;;-1:-1:-1;20785:180:110;;;;;:::i;:::-;;:::i;6321:84::-;;;;;;;;;;-1:-1:-1;6390:8:110;;;;6321:84;;6447:173;;;;;;;;;;;;;:::i;12947:4839::-;;;;;;;;;;-1:-1:-1;12947:4839:110;;;;;:::i;:::-;;:::i;2732:30::-;;;;;;;;;;-1:-1:-1;2732:30:110;;;;;;;;;;;2129:23;;;;;;;;;;-1:-1:-1;2129:23:110;;;;;;;;2243:52;;;;;;;;;;-1:-1:-1;2243:52:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;7337:120;;;;;;;;;;-1:-1:-1;7337:120:110;;;;;:::i;:::-;;:::i;:::-;;;6539:18:285;6527:31;;;6509:50;;6497:2;6482:18;7337:120:110;6365:200:285;2999:28:112;;;;;;;;;;-1:-1:-1;2999:28:112;;;;;;;;;;;;;;;;;;;;;;;;;6798:34:285;6786:47;;;6768:66;;6853:18;6907:15;;;6902:2;6887:18;;6880:43;6959:15;;6939:18;;;6932:43;6756:2;6741:18;2999:28:112;6570:411:285;2377:61:110;;;;;;;;;;-1:-1:-1;2377:61:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7188:25:285;;;7232:34;7302:15;;;7297:2;7282:18;;7275:43;7354:15;;7334:18;;;7327:43;7176:2;7161:18;2377:61:110;6986:390:285;18516:1971:110;;;;;;:::i;:::-;;:::i;6154:98::-;;;;;;;;;;-1:-1:-1;6233:12:110;;;;6154:98;;5491:423;;;;;;;;;;-1:-1:-1;5491:423:110;;;;;:::i;:::-;;:::i;18516:1971::-;18722:9;3417:18:112;3438:9;3417:30;;18876:11:110::1;18872:136;;;18911:17;::::0;::::1;::::0;18903:94:::1;;;::::0;;::::1;::::0;;9067:2:285;18903:94:110::1;::::0;::::1;9049:21:285::0;9086:18;;;9079:30;;;;9145:34;9125:18;;;9118:62;9216:34;9196:18;;;9189:62;9268:19;;18903:94:110::1;;;;;;;;;19176:37;19199:5;:12;19176:15;:37::i;:::-;19163:50;;:9;:50;;;;19155:98;;;::::0;::::1;::::0;;9500:2:285;19155:98:110::1;::::0;::::1;9482:21:285::0;9539:2;9519:18;;;9512:30;9578:34;9558:18;;;9551:62;9649:5;9629:18;;;9622:33;9672:19;;19155:98:110::1;9298:399:285::0;19155:98:110::1;19648:7;19632:5;:12;:23;;19624:66;;;::::0;::::1;::::0;;9904:2:285;19624:66:110::1;::::0;::::1;9886:21:285::0;9943:2;9923:18;;;9916:30;9982:32;9962:18;;;9955:60;10032:18;;19624:66:110::1;9702:354:285::0;19624:66:110::1;19796:10;19834:9;19820:23:::0;::::1;19816:108;;-1:-1:-1::0;19902:10:110::1;741:42:204::0;1213:27;19816:108:110::1;20181:23;20224:9;20235:6;20243:9;20254:11;20267:5;20207:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20181:92;;1716:1;20447:3;20420:60;;20441:4;20420:60;;;20469:10;20420:60;;;;;;:::i;:::-;;;;;;;;18737:1750;;3548:29:112::0;3557:7;3566:10;3548:8;:29::i;:::-;3339:245;18516:1971:110;;;;;;:::o;6664:180::-;6724:8;;;;6710:10;:22;6702:76;;;;;;;11133:2:285;6702:76:110;;;11115:21:285;11172:2;11152:18;;;11145:30;11211:34;11191:18;;;11184:62;11282:11;11262:18;;;11255:39;11311:19;;6702:76:110;10931:405:285;6702:76:110;6788:6;:14;;;;;;6817:20;;6826:10;184:74:285;;6817:20:110;;172:2:285;157:18;6817:20:110;;;;;;;;6664:180::o;9088:3746::-;4748:6;;;;:15;4740:50;;;;;;;11543:2:285;4740:50:110;;;11525:21:285;11582:2;11562:18;;;11555:30;11621:24;11601:18;;;11594:52;11663:18;;4740:50:110;11341:346:285;4740:50:110;9620:4:::1;9598:27;;:3;:10;;;:27;;::::0;9590:103:::1;;;::::0;::::1;::::0;;11894:2:285;9590:103:110::1;::::0;::::1;11876:21:285::0;11933:2;11913:18;;;11906:30;11972:34;11952:18;;;11945:62;12043:33;12023:18;;;12016:61;12094:19;;9590:103:110::1;11692:427:285::0;9590:103:110::1;9891:8;::::0;:36:::1;::::0;;;;::::1;::::0;::::1;12270:25:285::0;;;9870:18:110::1;::::0;9891:8:::1;::::0;::::1;;;::::0;:20:::1;::::0;12243:18:285;;9891:36:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47:::0;;-1:-1:-1;10072:45:110::1;;;::::0;;::::1;::::0;::::1;10100:16:::0;10072:45:::1;:::i;:::-;:27;:45::i;:::-;10058:10;:59;10037:135;;;::::0;::::1;::::0;;13978:2:285;10037:135:110::1;::::0;::::1;13960:21:285::0;14017:2;13997:18;;;13990:30;14056:34;14036:18;;;14029:62;14127:11;14107:18;;;14100:39;14156:19;;10037:135:110::1;13776:405:285::0;10037:135:110::1;10283:22;10308:27;10331:3;10308:22;:27::i;:::-;10345:40;10388:33:::0;;;:17:::1;:33;::::0;;;;;;;;10345:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;10283:52;;-1:-1:-1;10345:76:110;10975:31;;:145:::1;;-1:-1:-1::0;11093:27:110;;11026:8:::1;::::0;11047:30:::1;::::0;;::::1;::::0;11026:52;;;;;14362:34:285;14350:47;;;11026:52:110::1;::::0;::::1;14332:66:285::0;11026:8:110::1;::::0;;::::1;;;::::0;:20:::1;::::0;14305:18:285;;11026:52:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63:::0;:94:::1;;10975:145;10954:247;;;::::0;::::1;::::0;;14611:2:285;10954:247:110::1;::::0;::::1;14593:21:285::0;14650:2;14630:18;;;14623:30;14689:34;14669:18;;;14662:62;14760:25;14740:18;;;14733:53;14803:19;;10954:247:110::1;14409:419:285::0;10954:247:110::1;11481:147;::::0;;::::1;::::0;::::1;15007:25:285::0;;;11437:18:110::1;15048::285::0;;;15041:34;;;14980:18;;11481:147:110::1;::::0;;;;;::::1;::::0;;;;;;11458:180;;11481:147:::1;11458:180:::0;;::::1;::::0;12046:22;;::::1;12270:25:285::0;;;11458:180:110;-1:-1:-1;11991:161:110::1;::::0;12243:18:285;12046:22:110::1;::::0;;;;;::::1;::::0;;;11991:161;;::::1;::::0;;;::::1;::::0;;::::1;12046:22;11991:161:::0;::::1;::::0;12046:22;11991:161:::1;12079:16:::0;;11991:161:::1;:::i;:::-;12097:16;:41;;;11991:37;:161::i;:::-;11970:258;;;::::0;::::1;::::0;;16409:2:285;11970:258:110::1;::::0;::::1;16391:21:285::0;16448:2;16428:18;;;16421:30;16487:34;16467:18;;;16460:62;16558:20;16538:18;;;16531:48;16596:19;;11970:258:110::1;16207:414:285::0;11970:258:110::1;12546:165;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;12632:15;12546:165:::0;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;-1:-1:-1;12510:33:110;;;:17:::1;:33:::0;;;;;:201;;;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;;12816:10;;::::1;::::0;12804;;::::1;::::0;12771:56;;::::1;::::0;;::::1;::::0;;;::::1;::::0;12528:14;;12771:56:::1;::::0;-1:-1:-1;12771:56:110::1;9353:3481;;;;9088:3746:::0;;;;;:::o;20785:180::-;20911:8;;:36;;;;;;;;12270:25:285;;;20859:4:110;;20882:76;;20911:8;;;;;;;:20;;12243:18:285;;20911:36:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;20882:76;;:28;:76::i;:::-;20875:83;20785:180;-1:-1:-1;;20785:180:110:o;6447:173::-;6505:8;;;;6491:10;:22;6483:74;;;;;;;16828:2:285;6483:74:110;;;16810:21:285;16867:2;16847:18;;;16840:30;16906:34;16886:18;;;16879:62;16977:9;16957:18;;;16950:37;17004:19;;6483:74:110;16626:403:285;6483:74:110;6567:6;:13;;;;6576:4;6567:13;;;6595:18;;6602:10;184:74:285;;6595:18:110;;172:2:285;157:18;6595::110;14:250:285;12947:4839:110;4748:6;;;;:15;4740:50;;;;;;;11543:2:285;4740:50:110;;;11525:21:285;11582:2;11562:18;;;11555:30;11621:24;11601:18;;;11594:52;11663:18;;4740:50:110;11341:346:285;4740:50:110;13315:8:::1;::::0;:39:::1;:8;1337:42:158;13315:39:110;13294:137;;;::::0;::::1;::::0;;17236:2:285;13294:137:110::1;::::0;::::1;17218:21:285::0;17275:2;17255:18;;;17248:30;17314:34;17294:18;;;17287:62;17385:33;17365:18;;;17358:61;17436:19;;13294:137:110::1;17034:427:285::0;13294:137:110::1;13514:22;13539:27;13562:3;13539:22;:27::i;:::-;13576:40;13619:33:::0;;;:17:::1;:33;::::0;;;;;;;13576:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;13514:52;;-1:-1:-1;13902:31:110;;13894:94:::1;;;::::0;::::1;::::0;;17668:2:285;13894:94:110::1;::::0;::::1;17650:21:285::0;17707:2;17687:18;;;17680:30;17746:34;17726:18;;;17719:62;17817:20;17797:18;;;17790:48;17855:19;;13894:94:110::1;17466:414:285::0;13894:94:110::1;14305:8;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14275:16;:26;;;:58;;;;14254:180;;;::::0;::::1;::::0;;18276:2:285;14254:180:110::1;::::0;::::1;18258:21:285::0;18315:2;18295:18;;;18288:30;18354:34;18334:18;;;18327:62;18425:34;18405:18;;;18398:62;18497:13;18476:19;;;18469:42;18528:19;;14254:180:110::1;18074:479:285::0;14254:180:110::1;14824:56;14853:16;:26;;;14824:56;;:28;:56::i;:::-;14803:172;;;::::0;::::1;::::0;;18760:2:285;14803:172:110::1;::::0;::::1;18742:21:285::0;18799:2;18779:18;;;18772:30;18838:34;18818:18;;;18811:62;18909:34;18889:18;;;18882:62;18981:7;18960:19;;;18953:36;19006:19;;14803:172:110::1;18558:473:285::0;14803:172:110::1;15185:8;::::0;15206:30:::1;::::0;;::::1;::::0;15185:52;;;;;14362:34:285;14350:47;;;15185:52:110::1;::::0;::::1;14332:66:285::0;15146:36:110::1;::::0;15185:8:::1;::::0;::::1;;;::::0;:20:::1;::::0;14305:18:285;;15185:52:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15548:27:::0;;15525:19;;15146:91;;-1:-1:-1;15525:50:110::1;15504:170;;;::::0;::::1;::::0;;19238:2:285;15504:170:110::1;::::0;::::1;19220:21:285::0;19277:2;19257:18;;;19250:30;19316:34;19296:18;;;19289:62;19387:34;19367:18;;;19360:62;19459:11;19438:19;;;19431:40;19488:19;;15504:170:110::1;19036:477:285::0;15504:170:110::1;15773:48;15802:8;:18;;;15773:48;;:28;:48::i;:::-;15752:162;;;::::0;::::1;::::0;;19720:2:285;15752:162:110::1;::::0;::::1;19702:21:285::0;19759:2;19739:18;;;19732:30;19798:34;19778:18;;;19771:62;19869:34;19849:18;;;19842:62;19941:5;19920:19;;;19913:34;19964:19;;15752:162:110::1;19518:471:285::0;15752:162:110::1;16030:36;::::0;;;:20:::1;:36;::::0;;;;;::::1;;:45;16022:111;;;::::0;::::1;::::0;;20196:2:285;16022:111:110::1;::::0;::::1;20178:21:285::0;20235:2;20215:18;;;20208:30;20274:34;20254:18;;;20247:62;20345:23;20325:18;;;20318:51;20386:19;;16022:111:110::1;19994:417:285::0;16022:111:110::1;16213:36;::::0;;;:20:::1;:36;::::0;;;;;;;:43;;;::::1;16252:4;16213:43;::::0;;16361:10;;::::1;::::0;16350:8:::1;:21:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17030:10;::::1;::::0;17042:12:::1;::::0;::::1;::::0;17056:9:::1;::::0;::::1;::::0;17067:8:::1;::::0;::::1;::::0;17006:70:::1;::::0;17030:10;17042:12;17056:9;17006:23:::1;:70::i;:::-;17144:8;:38:::0;;;::::1;1337:42:158;17144:38:110;::::0;;17341:44:::1;::::0;16991:85;;-1:-1:-1;17361:14:110;;17341:44:::1;::::0;::::1;::::0;16991:85;5224:14:285;5217:22;5199:41;;5187:2;5172:18;;5059:187;17341:44:110::1;;;;;;;;17649:16:::0;::::1;::::0;::::1;:61;;-1:-1:-1::0;17669:9:110::1;1015:1:158;17669:41:110;17649:61;17645:135;;;17726:43;::::0;::::1;::::0;;20618:2:285;17726:43:110::1;::::0;::::1;20600:21:285::0;20657:2;20637:18;;;20630:30;20696:34;20676:18;;;20669:62;20767:3;20747:18;;;20740:31;20788:19;;17726:43:110::1;20416:397:285::0;17645:135:110::1;13049:4737;;;;12947:4839:::0;:::o;7337:120::-;7402:6;7427:15;:10;7440:2;7427:15;:::i;:::-;:23;;7445:5;7427:23;:::i;5491:423::-;4396:13:36;;2762:1:158;;4396:13:36;;;;;4395:14;:40;;;;-1:-1:-1;4413:12:36;;:22;;;;:12;;:22;4395:40;4387:99;;;;;;;21725:2:285;4387:99:36;;;21707:21:285;21764:2;21744:18;;;21737:30;21803:34;21783:18;;;21776:62;21874:16;21854:18;;;21847:44;21908:19;;4387:99:36;21523:410:285;4387:99:36;4496:12;:22;;4528:20;;4496:22;;;4528:20;4496:22;4528:20;;;;;;5710:8:110::1;:38:::0;;;;;::::1;1337:42:158;5710:38:110;::::0;;;5758:8:::1;:20:::0;;5788:12:::1;:28:::0;;5710:38:::1;5788:28:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5826:8:::1;:20:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;5856:16;::::1;;5758:20:::0;;::::1;::::0;;::::1;4496:22:36::0;5856:16:110;;;;;;;;;::::1;::::0;;5882:25:::1;:23;:25::i;:::-;4585:5:36::0;4569:21;;;;;;4605:20;;22110:4:285;22098:17;;22080:36;;4605:20:36;;22068:2:285;22053:18;4605:20:36;;;;;;;5491:423:110;;;;;:::o;3817:4037:112:-;3984:6;:19;3949:17;;3969:34;;3984:19;;;;;3969:12;:34;:::i;:::-;3949:54;;4014:28;4045:17;:15;:17::i;:::-;4014:48;;4072:26;4171:6;:27;;;4163:36;;4128:6;:23;;;4120:32;;4113:87;;;;:::i;:::-;4072:128;-1:-1:-1;4215:13:112;;4211:2229;;4572:6;:20;4535:19;;4557:59;;4597:19;;4572:20;;;;;4557:59;:::i;:::-;4535:81;;4630:19;4761:6;:34;;;4753:43;;4724:19;:73;;;;:::i;:::-;4668:6;:18;4653:50;;4691:12;;4668:18;;4653:50;:::i;:::-;4652:146;;;;:::i;:::-;5017:6;:18;4630:168;;-1:-1:-1;4939:17:112;;4959:232;;5002:50;;4630:168;;5017:18;;5002:50;:::i;:::-;5091:6;:21;;;5083:30;;5153:6;:21;;;5145:30;;4959:16;:232::i;:::-;4939:252;;5468:1;5456:9;:13;5452:741;;;5741:437;5788:239;5845:10;5910:6;:34;;;5902:43;;6002:1;5990:9;:13;;;;:::i;:::-;5788:16;:239::i;5741:437::-;5728:450;;5452:741;6286:49;;6387:42;6349:24;6416:12;6387:42;;;6286:6;6387:42;-1:-1:-1;;4211:2229:112;6534:6;:31;;6558:7;;6534:6;:20;;:31;;6558:7;;6534:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6652:6;:23;;;6644:32;;6611:6;:20;;;;;;;;;;;;6603:29;;6596:81;;6575:190;;;;;;;24367:2:285;6575:190:112;;;24349:21:285;24406:2;24386:18;;;24379:30;24445:34;24425:18;;;24418:62;24516:32;24496:18;;;24489:60;24566:19;;6575:190:112;24165:426:285;6575:190:112;6877:6;:18;6827:20;;6850:46;;6877:18;;6850:16;;;:46;:::i;:::-;6827:69;;7378:15;7411:31;7420:13;7435:6;7411:8;:31::i;:::-;7396:46;;:12;:46;:::i;:::-;7378:64;;7722:15;7754:9;7740:23;;:11;:23;:::i;:::-;7722:41;;7787:7;7777;:17;7773:75;;;7810:27;7819:17;7829:7;7819;:17;:::i;:::-;7810:8;:27::i;:::-;3881:3973;;;;;;3817:4037;;:::o;4937:384:162:-;5036:7;5113:16;:24;;;5155:16;:26;;;5199:16;:41;;;5258:16;:32;;;5085:219;;;;;;;;;;25185:25:285;;;25241:2;25226:18;;25219:34;;;;25284:2;25269:18;;25262:34;25327:2;25312:18;;25305:34;25172:3;25157:19;;24954:391;5085:219:162;;;;;;;;;;;;;5062:252;;;;;;5055:259;;4937:384;;;:::o;4432:211::-;4566:9;;4577:10;;;;;4589;;;;;4601:9;;;;4612:12;;;;4626:8;;;;4555:80;;4519:7;;4555:80;;4566:9;;4577:10;4626:8;4555:80;;:::i;1041:343:171:-;1234:11;1261:16;1280:19;1294:4;1280:13;:19::i;:::-;1261:38;;1318:59;1350:3;1355:6;1363;1371:5;1318:31;:59::i;:::-;1309:68;1041:343;-1:-1:-1;;;;;;1041:343:171:o;21218:180:110:-;21299:4;21353:8;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21340:51;;:10;:51;:::i;:::-;21322:15;:69;;21218:180;-1:-1:-1;;21218:180:110:o;4419:2320:165:-;4589:4;4609:13;4632:15;4650:21;4660:7;4669:1;4650:9;:21::i;:::-;4632:39;;4782:10;4772:1146;;4894:10;4891:1;4884:21;5009:2;5005;4998:14;5747:56;5743:2;5736:68;5900:3;5896:2;5889:15;4772:1146;6666:4;6630;6589:9;6583:16;6549:2;6538:9;6534:18;6491:6;6449:7;6415:5;6389:309;6361:337;4419:2320;-1:-1:-1;;;;;;;4419:2320:165:o;8362:180:112:-;4888:13:36;;;;;;;4880:69;;;;;;;26346:2:285;4880:69:36;;;26328:21:285;26385:2;26365:18;;;26358:30;26424:34;26404:18;;;26397:62;26495:13;26475:18;;;26468:41;26526:19;;4880:69:36;26144:407:285;4880:69:36;8442:93:112::1;::::0;;::::1;::::0;::::1;::::0;;8472:6:::1;8442:93:::0;;;-1:-1:-1;8442:93:112::1;::::0;::::1;::::0;8519:12:::1;8442:93;;::::0;;;;;;;8433:102;::::1;;:6;:102:::0;8362:180::o;8548:152:110:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8664:12:110;;:29;;;;;;;-1:-1:-1;;8664:12:110;;;;;:27;;:29;;;;;-1:-1:-1;;8664:29:110;;;;;;:12;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8657:36;;8548:152;:::o;537:161:154:-;616:6;641:50;656:28;671:6;679:4;656:14;:28::i;:::-;686:4;641:14;:50::i;:::-;634:57;;537:161;;;;;;:::o;1040:228::-;1138:6;1257:4;1180:72;1213:19;1220:12;1257:4;1213:19;:::i;:::-;1205:28;;:4;:28;:::i;:::-;1235:16;:9;1247:4;1235:16;:::i;:::-;1180:24;:72::i;:::-;1164:89;;:12;:89;:::i;:::-;1163:98;;;;:::i;413:105:62:-;471:7;502:1;497;:6;;:14;;510:1;497:14;;;-1:-1:-1;506:1:62;;490:21;-1:-1:-1;413:105:62:o;407:192:155:-;461:9;484:18;505:9;484:30;;524:69;556:7;544:9;531:22;;:10;:22;:::i;:::-;:32;524:69;;;579:3;;;:::i;:::-;;;524:69;;;451:148;;407:192;:::o;2052:142:171:-;2116:18;2181:4;2171:15;;;;;;2154:33;;;;;;28115:19:285;;28159:2;28150:12;;27986:182;2154:33:171;;;;;;;;;;;;;2146:41;;2052:142;;;:::o;2253:281:170:-;2446:11;2482:45;2494:6;2502:24;2506:4;2512:6;2520:5;2502:3;:24::i;:::-;6693:17:156;;;;;;;6672;;;;;;;;;;:38;;6569:148;2482:45:170;2473:54;2253:281;-1:-1:-1;;;;;2253:281:170:o;3615:365:165:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:165:o;311:102:64:-;367:6;397:1;392;:6;;:14;;405:1;392:14;;491:101;547:6;576:1;572;:5;:13;;584:1;572:13;;1208:273:88;1267:6;1391:36;491:4;1410:1;1399:8;1405:1;1399:5;:8::i;:::-;:12;;;;:::i;:::-;1398:28;;;;:::i;:::-;1391:6;:36::i;2830:6314:170:-;2923:19;2976:1;2962:4;:11;:15;2954:49;;;;;;;28375:2:285;2954:49:170;;;28357:21:285;28414:2;28394:18;;;28387:30;28453:23;28433:18;;;28426:51;28494:18;;2954:49:170;28173:345:285;2954:49:170;3014:23;3040:19;3052:6;3040:11;:19::i;:::-;3014:45;;3069:16;3088:21;3104:4;3088:15;:21::i;:::-;3069:40;;3119:26;3165:5;3148:23;;;;;;28115:19:285;;28159:2;28150:12;;27986:182;3148:23:170;;;;;;;;;;;;;3119:52;;3181:23;3295:9;3290:5790;3314:5;:12;3310:1;:16;3290:5790;;;3347:27;3377:5;3383:1;3377:8;;;;;;;;:::i;:::-;;;;;;;3347:38;;3516:3;:10;3497:15;:29;;3489:88;;;;;;;28914:2:285;3489:88:170;;;28896:21:285;28953:2;28933:18;;;28926:30;28992:34;28972:18;;;28965:62;29063:16;29043:18;;;29036:44;29097:19;;3489:88:170;28712:410:285;3489:88:170;3596:15;3615:1;3596:20;3592:837;;3768:19;;3758:30;;;;;;;3741:48;;3729:76;;3741:48;;3758:30;3741:48;28115:19:285;;;28159:2;28150:12;;27986:182;3741:48:170;;;;;;;;;;;;;3791:13;6693:17:156;;;;;;;6672;;;;;;;;;;:38;;6569:148;3729:76:170;3700:176;;;;;;;29329:2:285;3700:176:170;;;29311:21:285;29368:2;29348:18;;;29341:30;29407:31;29387:18;;;29380:59;29456:18;;3700:176:170;29127:353:285;3700:176:170;3592:837;;;3901:19;;:26;3931:2;-1:-1:-1;3897:532:170;;4097:19;;4087:30;;;;;;;4070:48;;4058:76;;4070:48;;4087:30;4070:48;28115:19:285;;;28159:2;28150:12;;27986:182;4058:76:170;4029:186;;;;;;;29687:2:285;4029:186:170;;;29669:21:285;29726:2;29706:18;;;29699:30;29765:34;29745:18;;;29738:62;29836:9;29816:18;;;29809:37;29863:19;;4029:186:170;29485:403:285;3897:532:170;4336:19;;6693:17:156;;;;;;;;;;6672;;;;;;;:38;4316:98:170;;;;;;;30095:2:285;4316:98:170;;;30077:21:285;30134:2;30114:18;;;30107:30;30173:34;30153:18;;;30146:62;30244:8;30224:18;;;30217:36;30270:19;;4316:98:170;29893:402:285;4316:98:170;936:14;803:2;949:1;936:14;:::i;:::-;4447:11;:19;;;:26;:48;4443:4627;;4538:3;:10;4519:15;:29;4515:1346;;5047:52;5067:11;:19;;;803:2;5067:31;;;;;;;;:::i;:::-;;;;;;;5047:19;:52::i;:::-;5038:61;;5145:1;5129:6;:13;:17;5121:89;;;;;;;30502:2:285;5121:89:170;;;30484:21:285;30541:2;30521:18;;;30514:30;30580:34;30560:18;;;30553:62;30651:29;30631:18;;;30624:57;30698:19;;5121:89:170;30300:423:285;5121:89:170;5322:1;5307:5;:12;:16;;;;:::i;:::-;5302:1;:21;5294:92;;;;;;;30930:2:285;5294:92:170;;;30912:21:285;30969:2;30949:18;;;30942:30;31008:34;30988:18;;;30981:62;31079:28;31059:18;;;31052:56;31125:19;;5294:92:170;30728:422:285;5294:92:170;5409:13;;;;;;;;4515:1346;5609:15;5633:3;5637:15;5633:20;;;;;;;;:::i;:::-;;;;;;;;;5627:27;;5609:45;;5676:33;5712:11;:19;;;5732:9;5712:30;;;;;;;;;;:::i;:::-;;;;;;;5676:66;;5780:20;5791:8;5780:10;:20::i;:::-;5764:36;-1:-1:-1;5822:20:170;5841:1;5822:20;;:::i;:::-;;;5447:414;;4443:4627;;;1105:1;5885:11;:19;;;:26;:59;5881:3189;;5964:17;5984:25;5997:11;5984:12;:25::i;:::-;5964:45;;6027:12;6048:4;6053:1;6048:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6074:12:170;6094:10;6103:1;6048:7;6094:10;:::i;:::-;6089:16;;:1;:16;:::i;:::-;6074:31;;6123:26;6152:25;6164:4;6170:6;6152:25;;:11;:25::i;:::-;6123:54;;6195:25;6223:33;6235:3;6240:15;6223:11;:33::i;:::-;6195:61;;6274:26;6303:51;6326:13;6341:12;6303:22;:51::i;:::-;6274:80;;6661:18;6637:13;:20;:42;6608:171;;;;;;;31719:2:285;6608:171:170;;;31701:21:285;31758:2;31738:18;;;31731:30;31797:34;31777:18;;;31770:62;31868:28;31848:18;;;31841:56;31914:19;;6608:171:170;31517:422:285;6608:171:170;6802:26;;;1447:1;6802:26;;:55;;-1:-1:-1;6832:25:170;;;1553:1;6832:25;6802:55;6798:2169;;;7498:18;7475:12;:19;:41;7442:185;;;;;;;32146:2:285;7442:185:170;;;32128:21:285;32185:2;32165:18;;;32158:30;32224:34;32204:18;;;32197:62;32295:31;32275:18;;;32268:59;32344:19;;7442:185:170;31944:425:285;7442:185:170;7985:43;8005:11;:19;;;8025:1;8005:22;;;;;;;;:::i;7985:43::-;7976:52;;8074:1;8058:6;:13;:17;8050:87;;;;;;;32576:2:285;8050:87:170;;;32558:21:285;32615:2;32595:18;;;32588:30;32654:34;32634:18;;;32627:62;32725:27;32705:18;;;32698:55;32770:19;;8050:87:170;32374:421:285;8050:87:170;8249:1;8234:5;:12;:16;;;;:::i;:::-;8229:1;:21;8221:90;;;;;;;33002:2:285;8221:90:170;;;32984:21:285;33041:2;33021:18;;;33014:30;33080:34;33060:18;;;33053:62;33151:26;33131:18;;;33124:54;33195:19;;8221:90:170;32800:420:285;8221:90:170;8334:13;;;;;;;;;;;;;;6798:2169;8376:31;;;;;:65;;-1:-1:-1;8411:30:170;;;1339:1;8411:30;8376:65;8372:595;;;8748:34;8759:11;:19;;;8779:1;8759:22;;;;;;;;:::i;:::-;;;;;;;8748:10;:34::i;:::-;8732:50;-1:-1:-1;8804:37:170;8823:18;8804:37;;:::i;:::-;;;8372:595;;;8888:60;;;;;33427:2:285;8888:60:170;;;33409:21:285;33466:2;33446:18;;;33439:30;33505:34;33485:18;;;33478:62;33576:20;33556:18;;;33549:48;33614:19;;8888:60:170;33225:414:285;8372:595:170;5946:3035;;;;;;5881:3189;;;9005:50;;;;;33846:2:285;9005:50:170;;;33828:21:285;33885:2;33865:18;;;33858:30;33924:34;33904:18;;;33897:62;33995:10;33975:18;;;33968:38;34023:19;;9005:50:170;33644:404:285;5881:3189:170;-1:-1:-1;3328:3:170;;;;:::i;:::-;;;;3290:5790;;;-1:-1:-1;9090:47:170;;;;;34255:2:285;9090:47:170;;;34237:21:285;34294:2;34274:18;;;34267:30;34333:34;34313:18;;;34306:62;34404:7;34384:18;;;34377:35;34429:19;;9090:47:170;34053:401:285;4596:2947:88;4644:8;4700:1;4696;:5;4688:27;;;;;;;34661:2:285;4688:27:88;;;34643:21:285;34700:1;34680:18;;;34673:29;34738:11;34718:18;;;34711:39;34767:18;;4688:27:88;34459:332:285;4688:27:88;5107:8;5145:2;5125:16;5138:1;5125:4;:16::i;:::-;5118:29;5175:3;:7;;;5161:22;;;;5208:17;;;6001:31;5997:35;;6052:5;;5459:2;6051:13;;;6068:32;6050:50;6120:5;;6119:13;;6136:33;6118:51;6189:5;;6188:13;;6205:33;6187:51;6258:5;;6257:13;;6274:33;6256:51;6327:5;;6326:13;;6343:32;6325:50;6395:5;;6394:13;;6411:30;6393:48;5398:31;5394:35;;5449:5;;5448:13;;5465:32;5447:50;5517:5;;5516:13;;5533:32;5515:50;5585:5;;5584:13;;5583:50;;5653:5;;5652:13;;5651:50;;5721:5;;5720:13;;;5719:50;;5787:5;;;:46;;6735:10;7125:43;7120:48;7232:71;:75;;;;7227:80;;;;7380:72;7375:77;7523:3;7517:9;;;-1:-1:-1;;4596:2947:88:o;1487:3103::-;1536:8;1718:21;1713:1;:26;1709:40;;-1:-1:-1;1748:1:88;;1487:3103;-1:-1:-1;1487:3103:88:o;1709:40::-;1948:21;1943:1;:26;1939:54;;1971:22;;;;;34998:2:285;1971:22:88;;;34980:21:285;35037:2;35017:18;;;35010:30;35076:14;35056:18;;;35049:42;35108:18;;1971:22:88;34796:336:285;1939:54:88;2266:5;2260:2;2255:7;;;2254:17;;-1:-1:-1;2535:8:88;2601:2;2559:29;2548:7;;;2547:41;2591:5;2547:49;2546:57;;2629:29;2625:33;;2621:37;;;3300:35;;;3355:5;;2935:2;3354:13;;;3371:32;3353:50;3423:5;;3422:13;;3421:51;;3492:5;;3491:13;;3508:34;3490:52;3562:5;;3561:13;;3560:53;;3633:5;;3632:13;;3649:35;3631:53;2941:32;2874:31;2870:35;;2925:5;;2924:13;;2923:50;;;2998:5;;;:40;;3058:5;3057:13;;;3074:35;3056:53;3127:5;;;3136:40;3127:50;4002:10;4502:49;4489:62;4564:3;:7;;;;4488:84;;;;;;-1:-1:-1;;1487:3103:88:o;9434:390:170:-;9553:13;;9500:24;;9553:13;9585:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9585:22:170;;;;;;;;;;;;;;;;9576:31;;9622:9;9617:201;9641:6;9637:1;:10;9617:201;;;9676:72;;;;;;;;9696:6;9703:1;9696:9;;;;;;;;:::i;:::-;;;;;;;9676:72;;;;9716:29;9735:6;9742:1;9735:9;;;;;;;;:::i;:::-;;;;;;;9716:18;:29::i;:::-;9676:72;;;9664:6;9671:1;9664:9;;;;;;;;:::i;:::-;;;;;;;;;;:84;9790:3;;9617:201;;;;9526:298;9434:390;;;:::o;4332:1978:156:-;4395:12;4419:21;4550:4;4544:11;4532:23;;4663:6;4657:13;4836:11;4830:4;4826:22;5195:4;5180:13;5176:24;5169:4;5165:9;5161:40;5151:8;5147:55;5141:4;5134:69;5293:13;5283:8;5276:31;;5434:4;5426:6;5422:17;5571:4;5561:8;5557:19;5662:4;5647:622;5675:11;5672:1;5669:18;5647:622;;;5854:1;5848:4;5844:12;5830;5826:31;5996:1;5984:10;5980:18;5974:25;5968:4;5963:37;6119:1;6113:4;6109:12;6101:6;6093:29;6249:4;6246:1;6242:12;6235:4;6227:6;6223:17;6215:40;-1:-1:-1;;5702:4:156;5695:12;5647:622;;;-1:-1:-1;6295:8:156;;4332:1978;-1:-1:-1;;;;;4332:1978:156:o;3993:464:168:-;4055:17;4085:18;4105;4125:20;4149:18;4163:3;4149:13;:18::i;:::-;4084:83;;-1:-1:-1;4084:83:168;-1:-1:-1;4084:83:168;-1:-1:-1;4198:21:168;4186:8;:33;;;;;;;;:::i;:::-;;4178:103;;;;;;;35528:2:285;4178:103:168;;;35510:21:285;35567:2;35547:18;;;35540:30;35606:34;35586:18;;;35579:62;35677:27;35657:18;;;35650:55;35722:19;;4178:103:168;35326:421:285;4178:103:168;4314:23;4327:10;4314;:23;:::i;:::-;4300:10;;:37;4292:102;;;;;;;35954:2:285;4292:102:168;;;35936:21:285;35993:2;35973:18;;;35966:30;36032:34;36012:18;;;36005:62;36103:22;36083:18;;;36076:50;36143:19;;4292:102:168;35752:416:285;4292:102:168;4412:38;4418:3;:7;;;4427:10;4439;4412:5;:38::i;10121:193:170:-;10195:16;10244:2;10229:5;:12;;;:17;:78;;10281:26;10301:5;10281:19;:26::i;:::-;10229:78;;;10249:29;10272:5;10249:22;:29::i;10495:172::-;10562:21;10606:54;10622:37;10642:5;:13;;;10656:1;10642:16;;;;;;;;:::i;10622:37::-;10606:15;:54::i;3805:237:156:-;3880:12;3918:6;:13;3908:6;:23;3904:70;;-1:-1:-1;3954:9:156;;;;;;;;;-1:-1:-1;3954:9:156;;3947:16;;3904:70;3990:45;3996:6;4004;4028;4012;:13;:22;;;;:::i;:::-;3990:5;:45::i;10892:321:170:-;10980:15;11007:11;11034:2;:9;11022:2;:9;:21;11021:47;;11059:2;:9;11021:47;;;11047:2;:9;11021:47;11007:61;;11078:129;11095:3;11085:7;:13;:43;;;;;11117:2;11120:7;11117:11;;;;;;;;:::i;:::-;;;;;;;;;11102:26;;;:2;11105:7;11102:11;;;;;;;;:::i;:::-;;;;;;;:26;11085:43;11078:129;;;11173:9;;;;;11078:129;;;10997:216;10892:321;;;;:::o;15328:575:88:-;15376:9;15409:1;15405;:5;15397:27;;;;;;;34661:2:285;15397:27:88;;;34643:21:285;34700:1;34680:18;;;34673:29;34738:11;34718:18;;;34711:39;34767:18;;15397:27:88;34459:332:285;15397:27:88;-1:-1:-1;15821:1:88;15473:34;-1:-1:-1;;15467:1:88;15463:49;15566:9;;;15546:18;15543:33;15540:1;15536:41;15530:48;15624:9;;;15612:10;15609:25;15606:1;15602:33;15596:40;15678:9;;;15670:6;15667:21;15664:1;15660:29;15654:36;15730:9;;;15724:4;15721:19;15718:1;15714:27;;;15708:34;;;15781:9;;;15776:3;15773:18;15770:1;15766:26;15760:33;15832:9;;;15824:18;;;15817:26;;15811:33;15876:9;;;-1:-1:-1;15862:25:88;;15328:575::o;3732:130:168:-;3791:21;3831:24;3840:14;3850:3;3840:9;:14::i;:::-;3831:8;:24::i;5246:4079::-;5335:15;5352;5369:17;5705:1;5692:3;:10;;;:14;5684:101;;;;;;;36375:2:285;5684:101:168;;;36357:21:285;36414:2;36394:18;;;36387:30;36453:34;36433:18;;;36426:62;36524:34;36504:18;;;36497:62;36596:12;36575:19;;;36568:41;36626:19;;5684:101:168;36173:478:285;5684:101:168;5816:7;;;;5898:10;;5796:17;5890:19;5943:4;5933:14;;5929:3390;;5999:1;6002;6005:21;5991:36;;;;;;;;;;5929:3390;6058:4;6048:6;:14;6044:3275;;6164:14;6181:13;6190:4;6181:6;:13;:::i;:::-;6164:30;;6247:6;6234:3;:10;;;:19;6209:140;;;;;;;36858:2:285;6209:140:168;;;36840:21:285;36897:2;36877:18;;;36870:30;36936:34;36916:18;;;36909:62;37007:34;36987:18;;;36980:62;37079:16;37058:19;;;37051:45;37113:19;;6209:140:168;36656:482:285;6209:140:168;6471:1;6462:11;;;6456:18;6476:14;6452:39;;6544:11;;;;:41;;-1:-1:-1;6559:26:168;;;;;;6544:41;6519:177;;;;;;;37345:2:285;6519:177:168;;;37327:21:285;37384:2;37364:18;;;37357:30;37423:34;37403:18;;;37396:62;37494:34;37474:18;;;37467:62;37566:15;37545:19;;;37538:44;37599:19;;6519:177:168;37143:481:285;6519:177:168;-1:-1:-1;6719:1:168;;-1:-1:-1;6722:6:168;-1:-1:-1;6730:21:168;;-1:-1:-1;6711:41:168;;-1:-1:-1;;6711:41:168;6044:3275;6783:4;6773:6;:14;6769:2550;;6831:19;6853:13;6862:4;6853:6;:13;:::i;:::-;6831:35;;6919:11;6906:3;:10;;;:24;6881:164;;;;;;;37831:2:285;6881:164:168;;;37813:21:285;37870:2;37850:18;;;37843:30;37909:34;37889:18;;;37882:62;37980:34;37960:18;;;37953:62;38052:19;38031;;;38024:48;38089:19;;6881:164:168;37629:485:285;6881:164:168;7167:1;7158:11;;7152:18;7172:14;7148:39;7060:25;7240:26;;;7215:143;;;;;;;38321:2:285;7215:143:168;;;38303:21:285;38360:2;38340:18;;;38333:30;38399:34;38379:18;;;38372:62;38470:34;38450:18;;;38443:62;38542:12;38521:19;;;38514:41;38572:19;;7215:143:168;38119:478:285;7215:143:168;7488:1;7479:11;;7473:18;7455:1;7451:19;;7446:3;7442:29;7438:54;7537:2;7528:11;;7520:96;;;;;;;38804:2:285;7520:96:168;;;38786:21:285;38843:2;38823:18;;;38816:30;38882:34;38862:18;;;38855:62;38953:34;38933:18;;;38926:62;39025:10;39004:19;;;38997:39;39053:19;;7520:96:168;38602:476:285;7520:96:168;7669:20;7683:6;7669:11;:20;:::i;:::-;7656:10;;:33;7631:168;;;;;;;39285:2:285;7631:168:168;;;39267:21:285;39324:2;39304:18;;;39297:30;39363:34;39343:18;;;39336:62;39434:34;39414:18;;;39407:62;39506:14;39485:19;;;39478:43;39538:19;;7631:168:168;39083:480:285;7631:168:168;7822:15;7826:11;7822:1;:15;:::i;:::-;7814:55;-1:-1:-1;7839:6:168;-1:-1:-1;7847:21:168;;-1:-1:-1;7814:55:168;;-1:-1:-1;;;;7814:55:168;6769:2550;7900:4;7890:6;:14;7886:1433;;8003:15;8021:13;8030:4;8021:6;:13;:::i;:::-;8003:31;;8070:7;8057:3;:10;;;:20;8049:107;;;;;;;39770:2:285;8049:107:168;;;39752:21:285;39809:2;39789:18;;;39782:30;39848:34;39828:18;;;39821:62;39919:34;39899:18;;;39892:62;39991:12;39970:19;;;39963:41;40021:19;;8049:107:168;39568:478:285;8049:107:168;8179:1;;-1:-1:-1;8182:7:168;-1:-1:-1;8179:1:168;;-1:-1:-1;8171:42:168;;-1:-1:-1;;8171:42:168;7886:1433;8270:20;8293:13;8302:4;8293:6;:13;:::i;:::-;8270:36;;8359:12;8346:3;:10;;;:25;8321:161;;;;;;;40253:2:285;8321:161:168;;;40235:21:285;40292:2;40272:18;;;40265:30;40331:34;40311:18;;;40304:62;40402:34;40382:18;;;40375:62;40474:15;40453:19;;;40446:44;40507:19;;8321:161:168;40051:481:285;8321:161:168;8604:1;8595:11;;8589:18;8609:14;8585:39;8497:25;8677:26;;;8652:141;;;;;;;40739:2:285;8652:141:168;;;40721:21:285;40778:2;40758:18;;;40751:30;40817:34;40797:18;;;40790:62;40888:34;40868:18;;;40861:62;40960:10;40939:19;;;40932:39;40988:19;;8652:141:168;40537:476:285;8652:141:168;8926:1;8917:11;;8911:18;8892:1;8888:20;;8883:3;8879:30;8875:55;8976:2;8966:12;;8958:95;;;;;;;41220:2:285;8958:95:168;;;41202:21:285;41259:2;41239:18;;;41232:30;41298:34;41278:18;;;41271:62;41369:34;41349:18;;;41342:62;41441:8;41420:19;;;41413:37;41467:19;;8958:95:168;41018:474:285;8958:95:168;9106:22;9121:7;9106:12;:22;:::i;:::-;9093:10;;:35;9068:168;;;;;;;41699:2:285;9068:168:168;;;41681:21:285;41738:2;41718:18;;;41711:30;41777:34;41757:18;;;41750:62;41848:34;41828:18;;;41821:62;41920:12;41899:19;;;41892:41;41950:19;;9068:168:168;41497:478:285;9068:168:168;9259:16;9263:12;9259:1;:16;:::i;:::-;9251:57;-1:-1:-1;9277:7:168;-1:-1:-1;9286:21:168;;-1:-1:-1;9251:57:168;;-1:-1:-1;;;;9251:57:168;5246:4079;;;;;;:::o;9585:780::-;9676:17;9722:7;9712:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9712:18:168;-1:-1:-1;9705:25:168;-1:-1:-1;9740:54:168;;9772:11;9740:54;10053:11;10067:36;10096:7;10088:4;10067:36;:::i;:::-;10053:50;;10158:2;10152:4;10148:13;10183:1;10197:87;10211:7;10208:1;10205:14;10197:87;;;10269:11;;;10263:18;10249:12;;;10242:40;10234:2;10227:10;10197:87;;;10307:7;10304:1;10301:14;10298:51;;;10345:1;10335:7;10329:4;10325:18;10318:29;10298:51;;;10122:237;9585:780;;;;;:::o;4847:137::-;4912:17;4948:29;4954:3;:7;;;4963:1;4966:3;:10;;;4948:5;:29::i;660:2816:156:-;752:12;824:7;808;818:2;808:12;:23;;800:50;;;;;;;42182:2:285;800:50:156;;;42164:21:285;42221:2;42201:18;;;42194:30;42260:16;42240:18;;;42233:44;42294:18;;800:50:156;41980:338:285;800:50:156;892:6;881:7;872:6;:16;:26;;864:53;;;;;;;42182:2:285;864:53:156;;;42164:21:285;42221:2;42201:18;;;42194:30;42260:16;42240:18;;;42233:44;42294:18;;864:53:156;41980:338:285;864:53:156;965:7;956:6;:16;939:6;:13;:33;;931:63;;;;;;;42525:2:285;931:63:156;;;42507:21:285;42564:2;42544:18;;;42537:30;42603:19;42583:18;;;42576:47;42640:18;;931:63:156;42323:341:285;931:63:156;1015:22;1078:15;;1106:1931;;;;3178:4;3172:11;3159:24;;3365:1;3354:9;3347:20;3413:4;3402:9;3398:20;3392:4;3385:34;1071:2362;;1106:1931;1288:4;1282:11;1269:24;;1947:2;1938:7;1934:16;2329:9;2322:17;2316:4;2312:28;2300:9;2289;2285:25;2281:60;2377:7;2373:2;2369:16;2629:6;2615:9;2608:17;2602:4;2598:28;2586:9;2578:6;2574:22;2570:57;2566:70;2403:389;2662:3;2658:2;2655:11;2403:389;;;2780:9;;2769:21;;2703:4;2695:13;;;;2735;2403:389;;;-1:-1:-1;;2810:26:156;;;3018:2;3001:11;3014:7;2997:25;2991:4;2984:39;-1:-1:-1;1071:2362:156;-1:-1:-1;3460:9:156;660:2816;-1:-1:-1;;;;660:2816:156:o;1298:390:168:-;-1:-1:-1;;;;;;;;;;;;;;;;;1453:1:168;1440:3;:10;:14;1432:101;;;;;;;36375:2:285;1432:101:168;;;36357:21:285;36414:2;36394:18;;;36387:30;36453:34;36433:18;;;36426:62;36524:34;36504:18;;;36497:62;36596:12;36575:19;;;36568:41;36626:19;;1432:101:168;36173:478:285;1432:101:168;-1:-1:-1;1640:41:168;;;;;;;;;1658:10;;1640:41;;1610:2;1601:12;;;1640:41;;;;;;;;1298:390::o;1840:1740::-;1901:21;1935:18;1955;1975:20;1999:18;2013:3;1999:13;:18::i;:::-;1934:83;;-1:-1:-1;1934:83:168;-1:-1:-1;1934:83:168;-1:-1:-1;2048:21:168;2036:8;:33;;;;;;;;:::i;:::-;;2028:102;;;;;;;42871:2:285;2028:102:168;;;42853:21:285;42910:2;42890:18;;;42883:30;42949:34;42929:18;;;42922:62;43020:26;43000:18;;;42993:54;43064:19;;2028:102:168;42669:420:285;2028:102:168;2176:10;;2149:23;2162:10;2149;:23;:::i;:::-;:37;2141:100;;;;;;;43296:2:285;2141:100:168;;;43278:21:285;43335:2;43315:18;;;43308:30;43374:34;43354:18;;;43347:62;43445:20;43425:18;;;43418:48;43483:19;;2141:100:168;43094:414:285;2141:100:168;2651:30;;;1123:2;2651:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2651:30:168;;;;;;;;;;;;;;-1:-1:-1;2644:37:168;-1:-1:-1;2692:17:168;2740:10;2760:681;2776:10;;2767:19;;2760:681;;;2803:18;2823;2846:150;2877:105;;;;;;;;2908:6;2895:3;:10;;;:19;;;;:::i;:::-;2877:105;;;;2972:6;2961:3;:7;;;2940:38;;;;:::i;:::-;2877:105;;2846:13;:150::i;:::-;2802:194;;;;;3201:153;;;;;;;;3248:10;3235;:23;;;;:::i;:::-;3201:153;;;;3332:6;3321:3;:7;;;3300:38;;;;:::i;:::-;3201:153;;;3183:4;3188:9;3183:15;;;;;;;;:::i;:::-;;;;;;;;;;:171;3369:14;3382:1;3369:14;;:::i;:::-;;-1:-1:-1;3407:23:168;3420:10;3407;:23;:::i;:::-;3397:33;;;;:::i;:::-;;;2788:653;;2760:681;;;-1:-1:-1;3541:23:168;;-1:-1:-1;3548:4:168;;1840:1740;-1:-1:-1;;;1840:1740:168:o;753:184:285:-;805:77;802:1;795:88;902:4;899:1;892:15;926:4;923:1;916:15;942:334;1013:2;1007:9;1069:2;1059:13;;1074:66;1055:86;1043:99;;1172:18;1157:34;;1193:22;;;1154:62;1151:88;;;1219:18;;:::i;:::-;1255:2;1248:22;942:334;;-1:-1:-1;942:334:285:o;1281:154::-;1367:42;1360:5;1356:54;1349:5;1346:65;1336:93;;1425:1;1422;1415:12;1336:93;1281:154;:::o;1440:589::-;1482:5;1535:3;1528:4;1520:6;1516:17;1512:27;1502:55;;1553:1;1550;1543:12;1502:55;1589:6;1576:20;1615:18;1611:2;1608:26;1605:52;;;1637:18;;:::i;:::-;1681:114;1789:4;1720:66;1713:4;1709:2;1705:13;1701:86;1697:97;1681:114;:::i;:::-;1820:2;1811:7;1804:19;1866:3;1859:4;1854:2;1846:6;1842:15;1838:26;1835:35;1832:55;;;1883:1;1880;1873:12;1832:55;1948:2;1941:4;1933:6;1929:17;1922:4;1913:7;1909:18;1896:55;1996:1;1971:16;;;1989:4;1967:27;1960:38;;;;1975:7;1440:589;-1:-1:-1;;;1440:589:285:o;2034:1032::-;2102:5;2150:4;2138:9;2133:3;2129:19;2125:30;2122:50;;;2168:1;2165;2158:12;2122:50;2201:2;2195:9;2243:4;2235:6;2231:17;2267:18;2335:6;2323:10;2320:22;2315:2;2303:10;2300:18;2297:46;2294:72;;;2346:18;;:::i;:::-;2386:10;2382:2;2375:22;2415:6;2406:15;;2458:9;2445:23;2437:6;2430:39;2521:2;2510:9;2506:18;2493:32;2478:47;;2534:33;2559:7;2534:33;:::i;:::-;2600:7;2595:2;2587:6;2583:15;2576:32;2660:2;2649:9;2645:18;2632:32;2617:47;;2673:33;2698:7;2673:33;:::i;:::-;2739:7;2734:2;2726:6;2722:15;2715:32;2808:2;2797:9;2793:18;2780:32;2775:2;2767:6;2763:15;2756:57;2875:3;2864:9;2860:19;2847:33;2841:3;2833:6;2829:16;2822:59;2932:3;2921:9;2917:19;2904:33;2890:47;;2960:2;2952:6;2949:14;2946:34;;;2976:1;2973;2966:12;2946:34;;3014:45;3055:3;3046:6;3035:9;3031:22;3014:45;:::i;:::-;3008:3;3000:6;2996:16;2989:71;;;2034:1032;;;;:::o;3071:1173::-;3271:6;3279;3287;3295;3303;3347:9;3338:7;3334:23;3377:3;3373:2;3369:12;3366:32;;;3394:1;3391;3384:12;3366:32;3434:9;3421:23;3463:18;3504:2;3496:6;3493:14;3490:34;;;3520:1;3517;3510:12;3490:34;3543:72;3607:7;3598:6;3587:9;3583:22;3543:72;:::i;:::-;3533:82;;3662:2;3651:9;3647:18;3634:32;3624:42;;3759:3;3690:66;3686:2;3682:75;3678:85;3675:105;;;3776:1;3773;3766:12;3675:105;3814:2;3803:9;3799:18;3789:28;;3870:3;3859:9;3855:19;3842:33;3826:49;;3900:2;3890:8;3887:16;3884:36;;;3916:1;3913;3906:12;3884:36;3954:8;3943:9;3939:24;3929:34;;4001:7;3994:4;3990:2;3986:13;3982:27;3972:55;;4023:1;4020;4013:12;3972:55;4063:2;4050:16;4036:30;;4089:2;4081:6;4078:14;4075:34;;;4105:1;4102;4095:12;4075:34;;4158:7;4153:2;4143:6;4140:1;4136:14;4132:2;4128:23;4124:32;4121:45;4118:65;;;4179:1;4176;4169:12;4118:65;3071:1173;;;;-1:-1:-1;3071:1173:285;;-1:-1:-1;;;4210:2:285;4202:11;;4232:6;3071:1173::o;4249:258::-;4321:1;4331:113;4345:6;4342:1;4339:13;4331:113;;;4421:11;;;4415:18;4402:11;;;4395:39;4367:2;4360:10;4331:113;;;4462:6;4459:1;4456:13;4453:48;;;4497:1;4488:6;4483:3;4479:16;4472:27;4453:48;;4249:258;;;:::o;4512:317::-;4554:3;4592:5;4586:12;4619:6;4614:3;4607:19;4635:63;4691:6;4684:4;4679:3;4675:14;4668:4;4661:5;4657:16;4635:63;:::i;:::-;4743:2;4731:15;4748:66;4727:88;4718:98;;;;4818:4;4714:109;;4512:317;-1:-1:-1;;4512:317:285:o;4834:220::-;4983:2;4972:9;4965:21;4946:4;5003:45;5044:2;5033:9;5029:18;5021:6;5003:45;:::i;5251:180::-;5310:6;5363:2;5351:9;5342:7;5338:23;5334:32;5331:52;;;5379:1;5376;5369:12;5331:52;-1:-1:-1;5402:23:285;;5251:180;-1:-1:-1;5251:180:285:o;5436:374::-;5535:6;5588:2;5576:9;5567:7;5563:23;5559:32;5556:52;;;5604:1;5601;5594:12;5556:52;5644:9;5631:23;5677:18;5669:6;5666:30;5663:50;;;5709:1;5706;5699:12;5663:50;5732:72;5796:7;5787:6;5776:9;5772:22;5732:72;:::i;:::-;5722:82;5436:374;-1:-1:-1;;;;5436:374:285:o;6000:171::-;6067:20;;6127:18;6116:30;;6106:41;;6096:69;;6161:1;6158;6151:12;6096:69;6000:171;;;:::o;6176:184::-;6234:6;6287:2;6275:9;6266:7;6262:23;6258:32;6255:52;;;6303:1;6300;6293:12;6255:52;6326:28;6344:9;6326:28;:::i;7381:160::-;7446:20;;7502:13;;7495:21;7485:32;;7475:60;;7531:1;7528;7521:12;7546:665;7646:6;7654;7662;7670;7678;7731:3;7719:9;7710:7;7706:23;7702:33;7699:53;;;7748:1;7745;7738:12;7699:53;7787:9;7774:23;7806:31;7831:5;7806:31;:::i;:::-;7856:5;-1:-1:-1;7908:2:285;7893:18;;7880:32;;-1:-1:-1;7931:37:285;7964:2;7949:18;;7931:37;:::i;:::-;7921:47;;7987:35;8018:2;8007:9;8003:18;7987:35;:::i;:::-;7977:45;;8073:3;8062:9;8058:19;8045:33;8101:18;8093:6;8090:30;8087:50;;;8133:1;8130;8123:12;8087:50;8156:49;8197:7;8188:6;8177:9;8173:22;8156:49;:::i;:::-;8146:59;;;7546:665;;;;;;;;:::o;8216:644::-;8345:6;8353;8361;8369;8422:3;8410:9;8401:7;8397:23;8393:33;8390:53;;;8439:1;8436;8429:12;8390:53;8478:9;8465:23;8497:31;8522:5;8497:31;:::i;:::-;8547:5;-1:-1:-1;8604:2:285;8589:18;;8576:32;8617:33;8576:32;8617:33;:::i;:::-;8669:7;-1:-1:-1;8728:2:285;8713:18;;8700:32;8741:33;8700:32;8741:33;:::i;:::-;8793:7;-1:-1:-1;8819:35:285;8850:2;8835:18;;8819:35;:::i;:::-;8809:45;;8216:644;;;;;;;:::o;10061:642::-;10324:6;10319:3;10312:19;10361:6;10356:2;10351:3;10347:12;10340:28;10420:66;10411:6;10406:3;10402:16;10398:89;10393:2;10388:3;10384:12;10377:111;10541:6;10534:14;10527:22;10522:3;10518:32;10513:2;10508:3;10504:12;10497:54;10294:3;10580:6;10574:13;10596:60;10649:6;10644:2;10639:3;10635:12;10630:2;10622:6;10618:15;10596:60;:::i;:::-;10676:16;;;;10694:2;10672:25;;10061:642;-1:-1:-1;;;;;;10061:642:285:o;12306:192::-;12385:13;;12438:34;12427:46;;12417:57;;12407:85;;12488:1;12485;12478:12;12503:616;12606:6;12659:2;12647:9;12638:7;12634:23;12630:32;12627:52;;;12675:1;12672;12665:12;12627:52;12708:2;12702:9;12750:2;12742:6;12738:15;12819:6;12807:10;12804:22;12783:18;12771:10;12768:34;12765:62;12762:88;;;12830:18;;:::i;:::-;12866:2;12859:22;12905:16;;12890:32;;12955:49;13000:2;12985:18;;12955:49;:::i;:::-;12950:2;12942:6;12938:15;12931:74;13038:49;13083:2;13072:9;13068:18;13038:49;:::i;:::-;13033:2;13021:15;;13014:74;13025:6;12503:616;-1:-1:-1;;;12503:616:285:o;13124:647::-;13217:6;13270:3;13258:9;13249:7;13245:23;13241:33;13238:53;;;13287:1;13284;13277:12;13238:53;13320:2;13314:9;13362:3;13354:6;13350:16;13432:6;13420:10;13417:22;13396:18;13384:10;13381:34;13378:62;13375:88;;;13443:18;;:::i;:::-;13483:10;13479:2;13472:22;;13531:9;13518:23;13510:6;13503:39;13603:2;13592:9;13588:18;13575:32;13570:2;13562:6;13558:15;13551:57;13669:2;13658:9;13654:18;13641:32;13636:2;13628:6;13624:15;13617:57;13735:2;13724:9;13720:18;13707:32;13702:2;13694:6;13690:15;13683:57;13759:6;13749:16;;;13124:647;;;;:::o;15268:934::-;15404:9;15438:18;15479:2;15471:6;15468:14;15465:40;;;15485:18;;:::i;:::-;15531:6;15528:1;15524:14;15557:4;15581:28;15605:2;15601;15597:11;15581:28;:::i;:::-;15643:19;;;15713:14;;;;15678:12;;;;15750:14;15739:26;;15736:46;;;15778:1;15775;15768:12;15736:46;15802:5;15816:353;15832:6;15827:3;15824:15;15816:353;;;15918:3;15905:17;15954:2;15941:11;15938:19;15935:109;;;15998:1;16027:2;16023;16016:14;15935:109;16069:57;16111:14;16097:11;16090:5;16086:23;16069:57;:::i;:::-;16057:70;;-1:-1:-1;16147:12:285;;;;15849;;15816:353;;;-1:-1:-1;16191:5:285;15268:934;-1:-1:-1;;;;;;;15268:934:285:o;17885:184::-;17955:6;18008:2;17996:9;17987:7;17983:23;17979:32;17976:52;;;18024:1;18021;18014:12;17976:52;-1:-1:-1;18047:16:285;;17885:184;-1:-1:-1;17885:184:285:o;20818:::-;20870:77;20867:1;20860:88;20967:4;20964:1;20957:15;20991:4;20988:1;20981:15;21007:270;21046:7;21078:18;21123:2;21120:1;21116:10;21153:2;21150:1;21146:10;21209:3;21205:2;21201:12;21196:3;21193:21;21186:3;21179:11;21172:19;21168:47;21165:73;;;21218:18;;:::i;:::-;21258:13;;21007:270;-1:-1:-1;;;;21007:270:285:o;21282:236::-;21321:3;21349:18;21394:2;21391:1;21387:10;21424:2;21421:1;21417:10;21455:3;21451:2;21447:12;21442:3;21439:21;21436:47;;;21463:18;;:::i;:::-;21499:13;;21282:236;-1:-1:-1;;;;21282:236:285:o;22127:125::-;22167:4;22195:1;22192;22189:8;22186:34;;;22200:18;;:::i;:::-;-1:-1:-1;22237:9:285;;22127:125::o;22257:184::-;22309:77;22306:1;22299:88;22406:4;22403:1;22396:15;22430:4;22427:1;22420:15;22446:308;22485:1;22511;22501:35;;22516:18;;:::i;:::-;22633:66;22630:1;22627:73;22558:66;22555:1;22552:73;22548:153;22545:179;;;22704:18;;:::i;:::-;-1:-1:-1;22738:10:285;;22446:308::o;22759:369::-;22798:4;22834:1;22831;22827:9;22943:1;22875:66;22871:74;22868:1;22864:82;22859:2;22852:10;22848:99;22845:125;;;22950:18;;:::i;:::-;23069:1;23001:66;22997:74;22994:1;22990:82;22986:2;22982:91;22979:117;;;23076:18;;:::i;:::-;-1:-1:-1;;23113:9:285;;22759:369::o;23133:655::-;23172:7;23204:66;23296:1;23293;23289:9;23324:1;23321;23317:9;23369:1;23365:2;23361:10;23358:1;23355:17;23350:2;23346;23342:11;23338:35;23335:61;;;23376:18;;:::i;:::-;23415:66;23507:1;23504;23500:9;23554:1;23550:2;23545:11;23542:1;23538:19;23533:2;23529;23525:11;23521:37;23518:63;;;23561:18;;:::i;:::-;23607:1;23604;23600:9;23590:19;;23654:1;23650:2;23645:11;23642:1;23638:19;23633:2;23629;23625:11;23621:37;23618:63;;;23661:18;;:::i;:::-;23726:1;23722:2;23717:11;23714:1;23710:19;23705:2;23701;23697:11;23693:37;23690:63;;;23733:18;;:::i;:::-;-1:-1:-1;;;23773:9:285;;;;;23133:655;-1:-1:-1;;;23133:655:285:o;23793:367::-;23832:3;23867:1;23864;23860:9;23976:1;23908:66;23904:74;23901:1;23897:82;23892:2;23885:10;23881:99;23878:125;;;23983:18;;:::i;:::-;24102:1;24034:66;24030:74;24027:1;24023:82;24019:2;24015:91;24012:117;;;24109:18;;:::i;:::-;-1:-1:-1;;24145:9:285;;23793:367::o;24596:228::-;24636:7;24762:1;24694:66;24690:74;24687:1;24684:81;24679:1;24672:9;24665:17;24661:105;24658:131;;;24769:18;;:::i;:::-;-1:-1:-1;24809:9:285;;24596:228::o;24829:120::-;24869:1;24895;24885:35;;24900:18;;:::i;:::-;-1:-1:-1;24934:9:285;;24829:120::o;25350:656::-;25637:6;25626:9;25619:25;25600:4;25663:42;25753:2;25745:6;25741:15;25736:2;25725:9;25721:18;25714:43;25805:2;25797:6;25793:15;25788:2;25777:9;25773:18;25766:43;;25845:6;25840:2;25829:9;25825:18;25818:34;25889:6;25883:3;25872:9;25868:19;25861:35;25933:3;25927;25916:9;25912:19;25905:32;25954:46;25995:3;25984:9;25980:19;25972:6;25954:46;:::i;:::-;25946:54;25350:656;-1:-1:-1;;;;;;;;25350:656:285:o;26011:128::-;26051:3;26082:1;26078:6;26075:1;26072:13;26069:39;;;26088:18;;:::i;:::-;-1:-1:-1;26124:9:285;;26011:128::o;26556:167::-;26634:13;;26687:10;26676:22;;26666:33;;26656:61;;26713:1;26710;26703:12;26728:160;26805:13;;26858:4;26847:16;;26837:27;;26827:55;;26878:1;26875;26868:12;26893:888;26996:6;27049:3;27037:9;27028:7;27024:23;27020:33;27017:53;;;27066:1;27063;27056:12;27017:53;27099:2;27093:9;27141:3;27133:6;27129:16;27211:6;27199:10;27196:22;27175:18;27163:10;27160:34;27157:62;27154:88;;;27222:18;;:::i;:::-;27258:2;27251:22;27297:39;27326:9;27297:39;:::i;:::-;27289:6;27282:55;27370:47;27413:2;27402:9;27398:18;27370:47;:::i;:::-;27365:2;27357:6;27353:15;27346:72;27451:47;27494:2;27483:9;27479:18;27451:47;:::i;:::-;27446:2;27438:6;27434:15;27427:72;27532:48;27576:2;27565:9;27561:18;27532:48;:::i;:::-;27527:2;27519:6;27515:15;27508:73;27615:49;27659:3;27648:9;27644:19;27615:49;:::i;:::-;27609:3;27601:6;27597:16;27590:75;27699:50;27744:3;27733:9;27729:19;27699:50;:::i;:::-;27693:3;27681:16;;27674:76;27685:6;26893:888;-1:-1:-1;;;26893:888:285:o;27786:195::-;27825:3;27856:66;27849:5;27846:77;27843:103;;27926:18;;:::i;:::-;-1:-1:-1;27973:1:285;27962:13;;27786:195::o;28523:184::-;28575:77;28572:1;28565:88;28672:4;28669:1;28662:15;28696:4;28693:1;28686:15;31155:157;31185:1;31219:4;31216:1;31212:12;31243:3;31233:37;;31250:18;;:::i;:::-;31302:3;31295:4;31292:1;31288:12;31284:22;31279:27;;;31155:157;;;;:::o;31317:195::-;31355:4;31392;31389:1;31385:12;31424:4;31421:1;31417:12;31449:3;31444;31441:12;31438:38;;;31456:18;;:::i;:::-;31493:13;;;31317:195;-1:-1:-1;;;31317:195:285:o;35137:184::-;35189:77;35186:1;35179:88;35286:4;35283:1;35276:15;35310:4;35307:1;35300:15", - "linkReferences": {} - }, - "methodIdentifiers": { - "GUARDIAN()": "724c184c", - "L2_ORACLE()": "001c2ff6", - "SYSTEM_CONFIG()": "f0498750", - "depositTransaction(address,uint256,uint64,bool,bytes)": "e9e05c42", - "donateETH()": "8b4c40b0", - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": "8c3152e9", - "finalizedWithdrawals(bytes32)": "a14238e7", - "guardian()": "452a9320", - "initialize(address,address,address,bool)": "fecf9734", - "isOutputFinalized(uint256)": "6dbffb78", - "l2Oracle()": "9b5f694a", - "l2Sender()": "9bf62d82", - "minimumGasLimit(uint64)": "a35d99df", - "params()": "cff0ab96", - "pause()": "8456cb59", - "paused()": "5c975abb", - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": "4870496f", - "provenWithdrawals(bytes32)": "e965084c", - "systemConfig()": "33d7e2bd", - "unpause()": "3f4ba83a", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONFIG\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal\",\"events\":{\"Paused(address)\":{\"params\":{\"account\":\"Address of the account triggering the pause.\"}},\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"Unpaused(address)\":{\"params\":{\"account\":\"Address of the account triggering the unpause.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"from\":\"Address that triggered the withdrawal transaction.\",\"to\":\"Address that the withdrawal transaction is directed to.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"GUARDIAN()\":{\"custom:legacy\":\"\"},\"L2_ORACLE()\":{\"custom:legacy\":\"\"},\"SYSTEM_CONFIG()\":{\"custom:legacy\":\"\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Amount of L2 gas to purchase by burning gas on L1.\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"initialize(address,address,address,bool)\":{\"params\":{\"_guardian\":\"Address that can pause withdrawals.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_paused\":\"Sets the contract's pausability state.\",\"_systemConfig\":\"Address of the SystemConfig contract.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"minimumGasLimit(uint64)\":{\"params\":{\"_byteCount\":\"Number of bytes in the calldata.\"},\"returns\":{\"_0\":\"The minimum gas limit for a deposit.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_l2OutputIndex\":\"L2 output index to prove against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}}},\"stateVariables\":{\"guardian\":{\"custom:network-specific\":\"\"},\"l2Oracle\":{\"custom:network-specific\":\"\"},\"systemConfig\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"1.10.0\"}},\"version\":1},\"userdoc\":{\"events\":{\"Paused(address)\":{\"notice\":\"Emitted when the pause is triggered.\"},\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"Unpaused(address)\":{\"notice\":\"Emitted when the pause is lifted.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"GUARDIAN()\":{\"notice\":\"Getter for the Guardian\"},\"L2_ORACLE()\":{\"notice\":\"Getter for the L2OutputOracle\"},\"SYSTEM_CONFIG()\":{\"notice\":\"Getter for the SystemConfig\"},\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"donateETH()\":{\"notice\":\"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"guardian()\":{\"notice\":\"Address that has the ability to pause and unpause withdrawals.\"},\"initialize(address,address,address,bool)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Oracle()\":{\"notice\":\"Address of the L2OutputOracle contract.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"minimumGasLimit(uint64)\":{\"notice\":\"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"pause()\":{\"notice\":\"Pauses withdrawals.\"},\"paused()\":{\"notice\":\"Determines if cross domain messaging is paused. When set to true, withdrawals are paused. This may be removed in the future.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"systemConfig()\":{\"notice\":\"Address of the SystemConfig contract.\"},\"unpause()\":{\"notice\":\"Unpauses withdrawals.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@cwia/=lib/clones-with-immutable-args/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L2OutputOracle.sol\":{\"keccak256\":\"0x60042eb3e619518cab9a8f2480b62871c2d813716e2e60d9a5e0c5f271c58705\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08538ef2aa99c508b56a8bb9b3c7b93476cba9dbf0b47783141e5e50a02156cc\",\"dweb:/ipfs/QmdvFZ1fUaTkNdmtB66rNAo73RxY7kccsgR6Uqz7psoXGN\"]},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0xdca91a921b402d82b455d7f11027514e8a16dca906cf820b3afffe271beb8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://688912b9d6005af8395d5c2eb5c4e3367a8be7b50ea97c34fc6a7ac0e2d8fd6a\",\"dweb:/ipfs/QmNPJDwHpNmJ5VPWAJB8muRpZxYeySZDVoV1TMVN7roijJ\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730\",\"dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG\"]},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0x4bbbc7868e948c44f29285a69383e93251a0c330a67929fb72def01cec060d4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e7ea2f8b3d49bee9c753f107ede6eda93b2cc0e34d0643fa14ebbb26c19e71b\",\"dweb:/ipfs/QmRP81F8FRVXVZs6u2f2poEPDnbFZhNwNYxHgCVEhGpEmB\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee\",\"dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe12e392f05f80d3837c9392d016471181ae1ee6b84ea91b4e125e6523e5f18a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3509231c228b7a4352573cd422cf0260dcbb94cfd915e5b664643db5475a5b7\",\"dweb:/ipfs/QmU2QERY4mHxqWFqSE5Exsy6Ftc5MTjTtYHC11fahLJWDC\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0xd5bbcb7da113e69562498d9543765e03912558ad66348682c2049c31e19f9d9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://afc6656ea10062c0c9d0817bb8683636caebf9222c9c102f29ea54fff74a2f93\",\"dweb:/ipfs/QmTNWtMgrTRHM6XtdUmA8bMZcuFpXoFCXgXR5vRihZWLuW\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x44e2b2dcfffc39c0fc95ccd3c2118c7e7585fadf3dca327877d5756c7d4b21c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c89e0d9cfcb08a0d3c46c85367a32bbd9703468ba4c0c5bb6e124c1d173b26b\",\"dweb:/ipfs/QmaY3nQHBBhHK1wrurVXiEeNL8hfZ1pRmhpqW44tFDJnDf\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x902a0a815272a5b76c647d9e82101aca765e9835a6624d0857088b9da0f58afd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c39a697aacb0a2eac0bf1fbd7790d835a685c61006f6d3464e19cbc96a24480\",\"dweb:/ipfs/QmV3T8ZTRWPB5CNuZjxwWQNoENd7W4SoBMnFG6Y6g6xYV4\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x9ba74a3b0a11693e622380807d213d5d1250d974e18b2cd768da9cbe719a6778\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0808d721ed9e05707526ee134faa051d707a95ee6b8bd6e0b1972275da8e5723\",\"dweb:/ipfs/QmcTTPu9xgckfWdbFUAcr2RAgk3J6vzyR4FpV798TjFMeN\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"]},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.15+commit.e14f2714" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "version", - "type": "uint8", - "indexed": false - } - ], - "type": "event", - "name": "Initialized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Paused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "version", - "type": "uint256", - "indexed": true - }, - { - "internalType": "bytes", - "name": "opaqueData", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "TransactionDeposited", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unpaused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bool", - "name": "success", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "WithdrawalFinalized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "WithdrawalProven", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "GUARDIAN", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "L2_ORACLE", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SYSTEM_CONFIG", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "depositTransaction" - }, - { - "inputs": [], - "stateMutability": "payable", - "type": "function", - "name": "donateETH" - }, - { - "inputs": [ - { - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "finalizeWithdrawalTransaction" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "finalizedWithdrawals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "_l2Oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract SystemConfig", - "name": "_systemConfig", - "type": "address" - }, - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isOutputFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "l2Oracle", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "l2Sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_byteCount", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "minimumGasLimit", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "prevBaseFee", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "prevBoughtGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "prevBlockNum", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "pause" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ] - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ] - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "proveWithdrawalTransaction" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "provenWithdrawals", - "outputs": [ - { - "internalType": "bytes32", - "name": "outputRoot", - "type": "bytes32" - }, - { - "internalType": "uint128", - "name": "timestamp", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "l2OutputIndex", - "type": "uint128" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "systemConfig", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "unpause" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ] - }, - { - "inputs": [], - "stateMutability": "payable", - "type": "receive" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "GUARDIAN()": { - "custom:legacy": "" - }, - "L2_ORACLE()": { - "custom:legacy": "" - }, - "SYSTEM_CONFIG()": { - "custom:legacy": "" - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "params": { - "_data": "Data to trigger the recipient with.", - "_gasLimit": "Amount of L2 gas to purchase by burning gas on L1.", - "_isCreation": "Whether or not the transaction is a contract creation.", - "_to": "Target address on L2.", - "_value": "ETH value to send to the recipient." - } - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "params": { - "_tx": "Withdrawal transaction to finalize." - } - }, - "initialize(address,address,address,bool)": { - "params": { - "_guardian": "Address that can pause withdrawals.", - "_l2Oracle": "Address of the L2OutputOracle contract.", - "_paused": "Sets the contract's pausability state.", - "_systemConfig": "Address of the SystemConfig contract." - } - }, - "isOutputFinalized(uint256)": { - "params": { - "_l2OutputIndex": "Index of the L2 output to check." - }, - "returns": { - "_0": "Whether or not the output is finalized." - } - }, - "minimumGasLimit(uint64)": { - "params": { - "_byteCount": "Number of bytes in the calldata." - }, - "returns": { - "_0": "The minimum gas limit for a deposit." - } - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "params": { - "_l2OutputIndex": "L2 output index to prove against.", - "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.", - "_tx": "Withdrawal transaction to finalize.", - "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "GUARDIAN()": { - "notice": "Getter for the Guardian" - }, - "L2_ORACLE()": { - "notice": "Getter for the L2OutputOracle" - }, - "SYSTEM_CONFIG()": { - "notice": "Getter for the SystemConfig" - }, - "constructor": { - "notice": "Constructs the OptimismPortal contract." - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." - }, - "donateETH()": { - "notice": "Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock." - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "notice": "Finalizes a withdrawal transaction." - }, - "finalizedWithdrawals(bytes32)": { - "notice": "A list of withdrawal hashes which have been successfully finalized." - }, - "guardian()": { - "notice": "Address that has the ability to pause and unpause withdrawals." - }, - "initialize(address,address,address,bool)": { - "notice": "Initializer." - }, - "isOutputFinalized(uint256)": { - "notice": "Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." - }, - "l2Oracle()": { - "notice": "Address of the L2OutputOracle contract." - }, - "l2Sender()": { - "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." - }, - "minimumGasLimit(uint64)": { - "notice": "Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility." - }, - "params()": { - "notice": "EIP-1559 style gas parameters." - }, - "pause()": { - "notice": "Pauses withdrawals." - }, - "paused()": { - "notice": "Determines if cross domain messaging is paused. When set to true, withdrawals are paused. This may be removed in the future." - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "notice": "Proves a withdrawal transaction." - }, - "provenWithdrawals(bytes32)": { - "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data." - }, - "systemConfig()": { - "notice": "Address of the SystemConfig contract." - }, - "unpause()": { - "notice": "Unpauses withdrawals." - }, - "version()": { - "notice": "Semantic version." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@cwia/=lib/clones-with-immutable-args/src/", - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@rari-capital/solmate/=lib/solmate/", - "clones-with-immutable-args/=lib/clones-with-immutable-args/src/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "safe-contracts/=lib/safe-contracts/contracts/", - "solmate/=lib/solmate/src/" - ], - "optimizer": { - "enabled": true, - "runs": 999999 - }, - "metadata": { - "bytecodeHash": "none" - }, - "compilationTarget": { - "src/L1/OptimismPortal.sol": "OptimismPortal" - }, - "libraries": {} - }, - "sources": { - "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { - "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", - "urls": [ - "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", - "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { - "keccak256": "0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e", - "urls": [ - "bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497", - "dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { - "keccak256": "0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3", - "urls": [ - "bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4", - "dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { - "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", - "urls": [ - "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", - "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol": { - "keccak256": "0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66", - "urls": [ - "bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f", - "dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/Address.sol": { - "keccak256": "0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10", - "urls": [ - "bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487", - "dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "keccak256": "0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0", - "urls": [ - "bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929", - "dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { - "keccak256": "0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7", - "urls": [ - "bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689", - "dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy" - ], - "license": "MIT" - }, - "lib/solmate/src/utils/FixedPointMathLib.sol": { - "keccak256": "0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d", - "urls": [ - "bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c", - "dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8" - ], - "license": "MIT" - }, - "src/L1/L2OutputOracle.sol": { - "keccak256": "0x60042eb3e619518cab9a8f2480b62871c2d813716e2e60d9a5e0c5f271c58705", - "urls": [ - "bzz-raw://08538ef2aa99c508b56a8bb9b3c7b93476cba9dbf0b47783141e5e50a02156cc", - "dweb:/ipfs/QmdvFZ1fUaTkNdmtB66rNAo73RxY7kccsgR6Uqz7psoXGN" - ], - "license": "MIT" - }, - "src/L1/OptimismPortal.sol": { - "keccak256": "0xdca91a921b402d82b455d7f11027514e8a16dca906cf820b3afffe271beb8a13", - "urls": [ - "bzz-raw://688912b9d6005af8395d5c2eb5c4e3367a8be7b50ea97c34fc6a7ac0e2d8fd6a", - "dweb:/ipfs/QmNPJDwHpNmJ5VPWAJB8muRpZxYeySZDVoV1TMVN7roijJ" - ], - "license": "MIT" - }, - "src/L1/ResourceMetering.sol": { - "keccak256": "0xa4d524f2a5e91a0b63a62603e712001c51c77e8371b93cbb576bcb7d074b7588", - "urls": [ - "bzz-raw://d6d8141b6c6dc72d2e684c1ae388c005fd78c9ca7fc9c15dddebd227ca4fd730", - "dweb:/ipfs/QmPfJrR4qssu769TDWJnxdTozqKtZUxiY8fs95bhfECTvG" - ], - "license": "MIT" - }, - "src/L1/SystemConfig.sol": { - "keccak256": "0x4bbbc7868e948c44f29285a69383e93251a0c330a67929fb72def01cec060d4e", - "urls": [ - "bzz-raw://1e7ea2f8b3d49bee9c753f107ede6eda93b2cc0e34d0643fa14ebbb26c19e71b", - "dweb:/ipfs/QmRP81F8FRVXVZs6u2f2poEPDnbFZhNwNYxHgCVEhGpEmB" - ], - "license": "MIT" - }, - "src/libraries/Arithmetic.sol": { - "keccak256": "0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560", - "urls": [ - "bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee", - "dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm" - ], - "license": "MIT" - }, - "src/libraries/Burn.sol": { - "keccak256": "0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010", - "urls": [ - "bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f", - "dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb" - ], - "license": "MIT" - }, - "src/libraries/Bytes.sol": { - "keccak256": "0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859", - "urls": [ - "bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782", - "dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9" - ], - "license": "MIT" - }, - "src/libraries/Constants.sol": { - "keccak256": "0xe12e392f05f80d3837c9392d016471181ae1ee6b84ea91b4e125e6523e5f18a2", - "urls": [ - "bzz-raw://a3509231c228b7a4352573cd422cf0260dcbb94cfd915e5b664643db5475a5b7", - "dweb:/ipfs/QmU2QERY4mHxqWFqSE5Exsy6Ftc5MTjTtYHC11fahLJWDC" - ], - "license": "MIT" - }, - "src/libraries/Encoding.sol": { - "keccak256": "0xd5bbcb7da113e69562498d9543765e03912558ad66348682c2049c31e19f9d9b", - "urls": [ - "bzz-raw://afc6656ea10062c0c9d0817bb8683636caebf9222c9c102f29ea54fff74a2f93", - "dweb:/ipfs/QmTNWtMgrTRHM6XtdUmA8bMZcuFpXoFCXgXR5vRihZWLuW" - ], - "license": "MIT" - }, - "src/libraries/Hashing.sol": { - "keccak256": "0x44e2b2dcfffc39c0fc95ccd3c2118c7e7585fadf3dca327877d5756c7d4b21c3", - "urls": [ - "bzz-raw://6c89e0d9cfcb08a0d3c46c85367a32bbd9703468ba4c0c5bb6e124c1d173b26b", - "dweb:/ipfs/QmaY3nQHBBhHK1wrurVXiEeNL8hfZ1pRmhpqW44tFDJnDf" - ], - "license": "MIT" - }, - "src/libraries/SafeCall.sol": { - "keccak256": "0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f", - "urls": [ - "bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a", - "dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq" - ], - "license": "MIT" - }, - "src/libraries/Storage.sol": { - "keccak256": "0x902a0a815272a5b76c647d9e82101aca765e9835a6624d0857088b9da0f58afd", - "urls": [ - "bzz-raw://9c39a697aacb0a2eac0bf1fbd7790d835a685c61006f6d3464e19cbc96a24480", - "dweb:/ipfs/QmV3T8ZTRWPB5CNuZjxwWQNoENd7W4SoBMnFG6Y6g6xYV4" - ], - "license": "MIT" - }, - "src/libraries/Types.sol": { - "keccak256": "0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4", - "urls": [ - "bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e", - "dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc" - ], - "license": "MIT" - }, - "src/libraries/rlp/RLPReader.sol": { - "keccak256": "0x9ba74a3b0a11693e622380807d213d5d1250d974e18b2cd768da9cbe719a6778", - "urls": [ - "bzz-raw://0808d721ed9e05707526ee134faa051d707a95ee6b8bd6e0b1972275da8e5723", - "dweb:/ipfs/QmcTTPu9xgckfWdbFUAcr2RAgk3J6vzyR4FpV798TjFMeN" - ], - "license": "MIT" - }, - "src/libraries/rlp/RLPWriter.sol": { - "keccak256": "0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6", - "urls": [ - "bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b", - "dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV" - ], - "license": "MIT" - }, - "src/libraries/trie/MerkleTrie.sol": { - "keccak256": "0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c", - "urls": [ - "bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74", - "dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE" - ], - "license": "MIT" - }, - "src/libraries/trie/SecureMerkleTrie.sol": { - "keccak256": "0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288", - "urls": [ - "bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681", - "dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw" - ], - "license": "MIT" - }, - "src/universal/ISemver.sol": { - "keccak256": "0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44", - "urls": [ - "bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a", - "dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR" - ], - "license": "MIT" - }, - "src/vendor/AddressAliasHelper.sol": { - "keccak256": "0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237", - "urls": [ - "bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88", - "dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR" - ], - "license": "Apache-2.0" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 32100, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 32103, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 60287, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "params", - "offset": 0, - "slot": "1", - "type": "t_struct(ResourceParams)60270_storage" - }, - { - "astId": 60292, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "__gap", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)48_storage" - }, - { - "astId": 59323, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "l2Sender", - "offset": 0, - "slot": "50", - "type": "t_address" - }, - { - "astId": 59328, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "finalizedWithdrawals", - "offset": 0, - "slot": "51", - "type": "t_mapping(t_bytes32,t_bool)" - }, - { - "astId": 59334, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "provenWithdrawals", - "offset": 0, - "slot": "52", - "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)59312_storage)" - }, - { - "astId": 59337, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "paused", - "offset": 0, - "slot": "53", - "type": "t_bool" - }, - { - "astId": 59341, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "l2Oracle", - "offset": 1, - "slot": "53", - "type": "t_contract(L2OutputOracle)59272" - }, - { - "astId": 59345, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "systemConfig", - "offset": 0, - "slot": "54", - "type": "t_contract(SystemConfig)61393" - }, - { - "astId": 59348, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "guardian", - "offset": 0, - "slot": "55", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)48_storage": { - "encoding": "inplace", - "label": "uint256[48]", - "numberOfBytes": "1536", - "base": "t_uint256" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(L2OutputOracle)59272": { - "encoding": "inplace", - "label": "contract L2OutputOracle", - "numberOfBytes": "20" - }, - "t_contract(SystemConfig)61393": { - "encoding": "inplace", - "label": "contract SystemConfig", - "numberOfBytes": "20" - }, - "t_mapping(t_bytes32,t_bool)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)59312_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)", - "numberOfBytes": "32", - "value": "t_struct(ProvenWithdrawal)59312_storage" - }, - "t_struct(ProvenWithdrawal)59312_storage": { - "encoding": "inplace", - "label": "struct OptimismPortal.ProvenWithdrawal", - "numberOfBytes": "64", - "members": [ - { - "astId": 59307, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "outputRoot", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 59309, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "timestamp", - "offset": 0, - "slot": "1", - "type": "t_uint128" - }, - { - "astId": 59311, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "l2OutputIndex", - "offset": 16, - "slot": "1", - "type": "t_uint128" - } - ] - }, - "t_struct(ResourceParams)60270_storage": { - "encoding": "inplace", - "label": "struct ResourceMetering.ResourceParams", - "numberOfBytes": "32", - "members": [ - { - "astId": 60265, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "prevBaseFee", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 60267, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "prevBoughtGas", - "offset": 16, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 60269, - "contract": "src/L1/OptimismPortal.sol:OptimismPortal", - "label": "prevBlockNum", - "offset": 24, - "slot": "0", - "type": "t_uint64" - } - ] - }, - "t_uint128": { - "encoding": "inplace", - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "version": 1, - "kind": "user", - "methods": { - "GUARDIAN()": { - "notice": "Getter for the Guardian" - }, - "L2_ORACLE()": { - "notice": "Getter for the L2OutputOracle" - }, - "SYSTEM_CONFIG()": { - "notice": "Getter for the SystemConfig" - }, - "constructor": { - "notice": "Constructs the OptimismPortal contract." - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." - }, - "donateETH()": { - "notice": "Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock." - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "notice": "Finalizes a withdrawal transaction." - }, - "finalizedWithdrawals(bytes32)": { - "notice": "A list of withdrawal hashes which have been successfully finalized." - }, - "guardian()": { - "notice": "Address that has the ability to pause and unpause withdrawals." - }, - "initialize(address,address,address,bool)": { - "notice": "Initializer." - }, - "isOutputFinalized(uint256)": { - "notice": "Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." - }, - "l2Oracle()": { - "notice": "Address of the L2OutputOracle contract." - }, - "l2Sender()": { - "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." - }, - "minimumGasLimit(uint64)": { - "notice": "Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility." - }, - "params()": { - "notice": "EIP-1559 style gas parameters." - }, - "pause()": { - "notice": "Pauses withdrawals." - }, - "paused()": { - "notice": "Determines if cross domain messaging is paused. When set to true, withdrawals are paused. This may be removed in the future." - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "notice": "Proves a withdrawal transaction." - }, - "provenWithdrawals(bytes32)": { - "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data." - }, - "systemConfig()": { - "notice": "Address of the SystemConfig contract." - }, - "unpause()": { - "notice": "Unpauses withdrawals." - }, - "version()": { - "notice": "Semantic version." - } - }, - "events": { - "Paused(address)": { - "notice": "Emitted when the pause is triggered." - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "notice": "Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2." - }, - "Unpaused(address)": { - "notice": "Emitted when the pause is lifted." - }, - "WithdrawalFinalized(bytes32,bool)": { - "notice": "Emitted when a withdrawal transaction is finalized." - }, - "WithdrawalProven(bytes32,address,address)": { - "notice": "Emitted when a withdrawal transaction is proven." - } - }, - "notice": "The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." - }, - "devdoc": { - "version": 1, - "kind": "dev", - "methods": { - "GUARDIAN()": {}, - "L2_ORACLE()": {}, - "SYSTEM_CONFIG()": {}, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "params": { - "_data": "Data to trigger the recipient with.", - "_gasLimit": "Amount of L2 gas to purchase by burning gas on L1.", - "_isCreation": "Whether or not the transaction is a contract creation.", - "_to": "Target address on L2.", - "_value": "ETH value to send to the recipient." - } - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "params": { - "_tx": "Withdrawal transaction to finalize." - } - }, - "initialize(address,address,address,bool)": { - "params": { - "_guardian": "Address that can pause withdrawals.", - "_l2Oracle": "Address of the L2OutputOracle contract.", - "_paused": "Sets the contract's pausability state.", - "_systemConfig": "Address of the SystemConfig contract." - } - }, - "isOutputFinalized(uint256)": { - "params": { - "_l2OutputIndex": "Index of the L2 output to check." - }, - "returns": { - "_0": "Whether or not the output is finalized." - } - }, - "minimumGasLimit(uint64)": { - "params": { - "_byteCount": "Number of bytes in the calldata." - }, - "returns": { - "_0": "The minimum gas limit for a deposit." - } - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "params": { - "_l2OutputIndex": "L2 output index to prove against.", - "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.", - "_tx": "Withdrawal transaction to finalize.", - "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract." - } - } - }, - "events": { - "Paused(address)": { - "params": { - "account": "Address of the account triggering the pause." - } - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "params": { - "from": "Address that triggered the deposit transaction.", - "opaqueData": "ABI encoded deposit data to be parsed off-chain.", - "to": "Address that the deposit transaction is directed to.", - "version": "Version of this deposit transaction event." - } - }, - "Unpaused(address)": { - "params": { - "account": "Address of the account triggering the unpause." - } - }, - "WithdrawalFinalized(bytes32,bool)": { - "params": { - "success": "Whether the withdrawal transaction was successful.", - "withdrawalHash": "Hash of the withdrawal transaction." - } - }, - "WithdrawalProven(bytes32,address,address)": { - "params": { - "from": "Address that triggered the withdrawal transaction.", - "to": "Address that the withdrawal transaction is directed to.", - "withdrawalHash": "Hash of the withdrawal transaction." - } - } - } - }, - "ast": { - "absolutePath": "src/L1/OptimismPortal.sol", - "id": 59998, - "exportedSymbols": { - "AddressAliasHelper": [ - 78127 - ], - "Constants": [ - 69571 - ], - "Hashing": [ - 70279 - ], - "ISemver": [ - 75669 - ], - "Initializable": [ - 32244 - ], - "L2OutputOracle": [ - 59272 - ], - "OptimismPortal": [ - 59997 - ], - "ResourceMetering": [ - 60599 - ], - "SafeCall": [ - 70479 - ], - "SecureMerkleTrie": [ - 72279 - ], - "SystemConfig": [ - 61393 - ], - "Types": [ - 70595 - ] - }, - "nodeType": "SourceUnit", - "src": "32:21369:110", - "nodes": [ - { - "id": 59274, - "nodeType": "PragmaDirective", - "src": "32:23:110", - "nodes": [], - "literals": [ - "solidity", - "0.8", - ".15" - ] - }, - { - "id": 59276, - "nodeType": "ImportDirective", - "src": "57:86:110", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 32245, - "symbolAliases": [ - { - "foreign": { - "id": 59275, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32244, - "src": "66:13:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59278, - "nodeType": "ImportDirective", - "src": "144:54:110", - "nodes": [], - "absolutePath": "src/libraries/SafeCall.sol", - "file": "src/libraries/SafeCall.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 70480, - "symbolAliases": [ - { - "foreign": { - "id": 59277, - "name": "SafeCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70479, - "src": "153:8:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59280, - "nodeType": "ImportDirective", - "src": "199:59:110", - "nodes": [], - "absolutePath": "src/L1/L2OutputOracle.sol", - "file": "src/L1/L2OutputOracle.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 59273, - "symbolAliases": [ - { - "foreign": { - "id": 59279, - "name": "L2OutputOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59272, - "src": "208:14:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59282, - "nodeType": "ImportDirective", - "src": "259:55:110", - "nodes": [], - "absolutePath": "src/L1/SystemConfig.sol", - "file": "src/L1/SystemConfig.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 61394, - "symbolAliases": [ - { - "foreign": { - "id": 59281, - "name": "SystemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61393, - "src": "268:12:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59284, - "nodeType": "ImportDirective", - "src": "315:56:110", - "nodes": [], - "absolutePath": "src/libraries/Constants.sol", - "file": "src/libraries/Constants.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 69572, - "symbolAliases": [ - { - "foreign": { - "id": 59283, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "324:9:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59286, - "nodeType": "ImportDirective", - "src": "372:48:110", - "nodes": [], - "absolutePath": "src/libraries/Types.sol", - "file": "src/libraries/Types.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 70596, - "symbolAliases": [ - { - "foreign": { - "id": 59285, - "name": "Types", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70595, - "src": "381:5:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59288, - "nodeType": "ImportDirective", - "src": "421:52:110", - "nodes": [], - "absolutePath": "src/libraries/Hashing.sol", - "file": "src/libraries/Hashing.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 70280, - "symbolAliases": [ - { - "foreign": { - "id": 59287, - "name": "Hashing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70279, - "src": "430:7:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59290, - "nodeType": "ImportDirective", - "src": "474:75:110", - "nodes": [], - "absolutePath": "src/libraries/trie/SecureMerkleTrie.sol", - "file": "src/libraries/trie/SecureMerkleTrie.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 72280, - "symbolAliases": [ - { - "foreign": { - "id": 59289, - "name": "SecureMerkleTrie", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 72279, - "src": "483:16:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59292, - "nodeType": "ImportDirective", - "src": "550:71:110", - "nodes": [], - "absolutePath": "src/vendor/AddressAliasHelper.sol", - "file": "src/vendor/AddressAliasHelper.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 78128, - "symbolAliases": [ - { - "foreign": { - "id": 59291, - "name": "AddressAliasHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 78127, - "src": "559:18:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59294, - "nodeType": "ImportDirective", - "src": "622:63:110", - "nodes": [], - "absolutePath": "src/L1/ResourceMetering.sol", - "file": "src/L1/ResourceMetering.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 60600, - "symbolAliases": [ - { - "foreign": { - "id": 59293, - "name": "ResourceMetering", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60599, - "src": "631:16:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59296, - "nodeType": "ImportDirective", - "src": "686:52:110", - "nodes": [], - "absolutePath": "src/universal/ISemver.sol", - "file": "src/universal/ISemver.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 75670, - "symbolAliases": [ - { - "foreign": { - "id": 59295, - "name": "ISemver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75669, - "src": "695:7:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59298, - "nodeType": "ImportDirective", - "src": "739:56:110", - "nodes": [], - "absolutePath": "src/libraries/Constants.sol", - "file": "src/libraries/Constants.sol", - "nameLocation": "-1:-1:-1", - "scope": 59998, - "sourceUnit": 69572, - "symbolAliases": [ - { - "foreign": { - "id": 59297, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "748:9:110", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 59997, - "nodeType": "ContractDefinition", - "src": "1135:20265:110", - "nodes": [ - { - "id": 59312, - "nodeType": "StructDefinition", - "src": "1503:117:110", - "nodes": [], - "canonicalName": "OptimismPortal.ProvenWithdrawal", - "members": [ - { - "constant": false, - "id": 59307, - "mutability": "mutable", - "name": "outputRoot", - "nameLocation": "1545:10:110", - "nodeType": "VariableDeclaration", - "scope": 59312, - "src": "1537:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59306, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1537:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59309, - "mutability": "mutable", - "name": "timestamp", - "nameLocation": "1573:9:110", - "nodeType": "VariableDeclaration", - "scope": 59312, - "src": "1565:17:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 59308, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "1565:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59311, - "mutability": "mutable", - "name": "l2OutputIndex", - "nameLocation": "1600:13:110", - "nodeType": "VariableDeclaration", - "scope": 59312, - "src": "1592:21:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 59310, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "1592:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "name": "ProvenWithdrawal", - "nameLocation": "1510:16:110", - "scope": 59997, - "visibility": "public" - }, - { - "id": 59316, - "nodeType": "VariableDeclaration", - "src": "1672:45:110", - "nodes": [], - "constant": true, - "documentation": { - "id": 59313, - "nodeType": "StructuredDocumentation", - "src": "1626:41:110", - "text": "@notice Version of the deposit event." - }, - "mutability": "constant", - "name": "DEPOSIT_VERSION", - "nameLocation": "1698:15:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59314, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1672:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "30", - "id": 59315, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1716:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "internal" - }, - { - "id": 59320, - "nodeType": "VariableDeclaration", - "src": "1813:60:110", - "nodes": [], - "constant": true, - "documentation": { - "id": 59317, - "nodeType": "StructuredDocumentation", - "src": "1724:84:110", - "text": "@notice The L2 gas limit set when eth is deposited using the receive() function." - }, - "mutability": "constant", - "name": "RECEIVE_DEFAULT_GAS_LIMIT", - "nameLocation": "1838:25:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 59318, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1813:6:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "value": { - "hexValue": "3130305f303030", - "id": 59319, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1866:7:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000_by_1", - "typeString": "int_const 100000" - }, - "value": "100_000" - }, - "visibility": "internal" - }, - { - "id": 59323, - "nodeType": "VariableDeclaration", - "src": "2129:23:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59321, - "nodeType": "StructuredDocumentation", - "src": "1880:244:110", - "text": "@notice Address of the L2 account which initiated a withdrawal in this transaction.\n If the of this variable is the default L2 sender address, then we are NOT inside of\n a call to finalizeWithdrawalTransaction." - }, - "functionSelector": "9bf62d82", - "mutability": "mutable", - "name": "l2Sender", - "nameLocation": "2144:8:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59322, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2129:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "id": 59328, - "nodeType": "VariableDeclaration", - "src": "2243:52:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59324, - "nodeType": "StructuredDocumentation", - "src": "2159:79:110", - "text": "@notice A list of withdrawal hashes which have been successfully finalized." - }, - "functionSelector": "a14238e7", - "mutability": "mutable", - "name": "finalizedWithdrawals", - "nameLocation": "2275:20:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - }, - "typeName": { - "id": 59327, - "keyType": { - "id": 59325, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2251:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "2243:24:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - }, - "valueType": { - "id": 59326, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2262:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "id": 59334, - "nodeType": "VariableDeclaration", - "src": "2377:61:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59329, - "nodeType": "StructuredDocumentation", - "src": "2302:70:110", - "text": "@notice A mapping of withdrawal hashes to `ProvenWithdrawal` data." - }, - "functionSelector": "e965084c", - "mutability": "mutable", - "name": "provenWithdrawals", - "nameLocation": "2421:17:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$", - "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)" - }, - "typeName": { - "id": 59333, - "keyType": { - "id": 59330, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2385:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "2377:36:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$", - "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)" - }, - "valueType": { - "id": 59332, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59331, - "name": "ProvenWithdrawal", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59312, - "src": "2396:16:110" - }, - "referencedDeclaration": 59312, - "src": "2396:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal" - } - } - }, - "visibility": "public" - }, - { - "id": 59337, - "nodeType": "VariableDeclaration", - "src": "2618:18:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59335, - "nodeType": "StructuredDocumentation", - "src": "2445:168:110", - "text": "@notice Determines if cross domain messaging is paused.\n When set to true, withdrawals are paused.\n This may be removed in the future." - }, - "functionSelector": "5c975abb", - "mutability": "mutable", - "name": "paused", - "nameLocation": "2630:6:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59336, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2618:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "id": 59341, - "nodeType": "VariableDeclaration", - "src": "2732:30:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59338, - "nodeType": "StructuredDocumentation", - "src": "2643:84:110", - "text": "@notice Address of the L2OutputOracle contract.\n @custom:network-specific" - }, - "functionSelector": "9b5f694a", - "mutability": "mutable", - "name": "l2Oracle", - "nameLocation": "2754:8:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - }, - "typeName": { - "id": 59340, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59339, - "name": "L2OutputOracle", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59272, - "src": "2732:14:110" - }, - "referencedDeclaration": 59272, - "src": "2732:14:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "visibility": "public" - }, - { - "id": 59345, - "nodeType": "VariableDeclaration", - "src": "2856:32:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59342, - "nodeType": "StructuredDocumentation", - "src": "2769:82:110", - "text": "@notice Address of the SystemConfig contract.\n @custom:network-specific" - }, - "functionSelector": "33d7e2bd", - "mutability": "mutable", - "name": "systemConfig", - "nameLocation": "2876:12:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - }, - "typeName": { - "id": 59344, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59343, - "name": "SystemConfig", - "nodeType": "IdentifierPath", - "referencedDeclaration": 61393, - "src": "2856:12:110" - }, - "referencedDeclaration": 61393, - "src": "2856:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "visibility": "public" - }, - { - "id": 59348, - "nodeType": "VariableDeclaration", - "src": "3007:23:110", - "nodes": [], - "constant": false, - "documentation": { - "id": 59346, - "nodeType": "StructuredDocumentation", - "src": "2895:107:110", - "text": "@notice Address that has the ability to pause and unpause withdrawals.\n @custom:network-specific" - }, - "functionSelector": "452a9320", - "mutability": "mutable", - "name": "guardian", - "nameLocation": "3022:8:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59347, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3007:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "id": 59359, - "nodeType": "EventDefinition", - "src": "3541:112:110", - "nodes": [], - "anonymous": false, - "documentation": { - "id": 59349, - "nodeType": "StructuredDocumentation", - "src": "3037:499:110", - "text": "@notice Emitted when a transaction is deposited from L1 to L2.\n The parameters of this event are read by the rollup node and used to derive deposit\n transactions on L2.\n @param from Address that triggered the deposit transaction.\n @param to Address that the deposit transaction is directed to.\n @param version Version of this deposit transaction event.\n @param opaqueData ABI encoded deposit data to be parsed off-chain." - }, - "eventSelector": "b3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32", - "name": "TransactionDeposited", - "nameLocation": "3547:20:110", - "parameters": { - "id": 59358, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59351, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "3584:4:110", - "nodeType": "VariableDeclaration", - "scope": 59359, - "src": "3568:20:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3568:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59353, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "3606:2:110", - "nodeType": "VariableDeclaration", - "scope": 59359, - "src": "3590:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59352, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3590:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59355, - "indexed": true, - "mutability": "mutable", - "name": "version", - "nameLocation": "3626:7:110", - "nodeType": "VariableDeclaration", - "scope": 59359, - "src": "3610:23:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3610:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59357, - "indexed": false, - "mutability": "mutable", - "name": "opaqueData", - "nameLocation": "3641:10:110", - "nodeType": "VariableDeclaration", - "scope": 59359, - "src": "3635:16:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 59356, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3635:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3567:85:110" - } - }, - { - "id": 59368, - "nodeType": "EventDefinition", - "src": "3957:97:110", - "nodes": [], - "anonymous": false, - "documentation": { - "id": 59360, - "nodeType": "StructuredDocumentation", - "src": "3659:293:110", - "text": "@notice Emitted when a withdrawal transaction is proven.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param from Address that triggered the withdrawal transaction.\n @param to Address that the withdrawal transaction is directed to." - }, - "eventSelector": "67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62", - "name": "WithdrawalProven", - "nameLocation": "3963:16:110", - "parameters": { - "id": 59367, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59362, - "indexed": true, - "mutability": "mutable", - "name": "withdrawalHash", - "nameLocation": "3996:14:110", - "nodeType": "VariableDeclaration", - "scope": 59368, - "src": "3980:30:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59361, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3980:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59364, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "4028:4:110", - "nodeType": "VariableDeclaration", - "scope": 59368, - "src": "4012:20:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59363, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4012:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59366, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "4050:2:110", - "nodeType": "VariableDeclaration", - "scope": 59368, - "src": "4034:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59365, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4034:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3979:74:110" - } - }, - { - "id": 59375, - "nodeType": "EventDefinition", - "src": "4275:72:110", - "nodes": [], - "anonymous": false, - "documentation": { - "id": 59369, - "nodeType": "StructuredDocumentation", - "src": "4060:210:110", - "text": "@notice Emitted when a withdrawal transaction is finalized.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param success Whether the withdrawal transaction was successful." - }, - "eventSelector": "db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b", - "name": "WithdrawalFinalized", - "nameLocation": "4281:19:110", - "parameters": { - "id": 59374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59371, - "indexed": true, - "mutability": "mutable", - "name": "withdrawalHash", - "nameLocation": "4317:14:110", - "nodeType": "VariableDeclaration", - "scope": 59375, - "src": "4301:30:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59370, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4301:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59373, - "indexed": false, - "mutability": "mutable", - "name": "success", - "nameLocation": "4338:7:110", - "nodeType": "VariableDeclaration", - "scope": 59375, - "src": "4333:12:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59372, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4333:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4300:46:110" - } - }, - { - "id": 59380, - "nodeType": "EventDefinition", - "src": "4474:30:110", - "nodes": [], - "anonymous": false, - "documentation": { - "id": 59376, - "nodeType": "StructuredDocumentation", - "src": "4353:116:110", - "text": "@notice Emitted when the pause is triggered.\n @param account Address of the account triggering the pause." - }, - "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258", - "name": "Paused", - "nameLocation": "4480:6:110", - "parameters": { - "id": 59379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59378, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "4495:7:110", - "nodeType": "VariableDeclaration", - "scope": 59380, - "src": "4487:15:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59377, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4487:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4486:17:110" - } - }, - { - "id": 59385, - "nodeType": "EventDefinition", - "src": "4630:32:110", - "nodes": [], - "anonymous": false, - "documentation": { - "id": 59381, - "nodeType": "StructuredDocumentation", - "src": "4510:115:110", - "text": "@notice Emitted when the pause is lifted.\n @param account Address of the account triggering the unpause." - }, - "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa", - "name": "Unpaused", - "nameLocation": "4636:8:110", - "parameters": { - "id": 59384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59383, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "4653:7:110", - "nodeType": "VariableDeclaration", - "scope": 59385, - "src": "4645:15:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59382, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4645:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4644:17:110" - } - }, - { - "id": 59397, - "nodeType": "ModifierDefinition", - "src": "4705:103:110", - "nodes": [], - "body": { - "id": 59396, - "nodeType": "Block", - "src": "4730:78:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 59391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59389, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59337, - "src": "4748:6:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "66616c7365", - "id": 59390, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4758:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4748:15:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a20706175736564", - "id": 59392, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4765:24:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b66caa771ead292be27065b6fdbf17fc2b4f01cda6f3a71dafb599bc9ced165d", - "typeString": "literal_string \"OptimismPortal: paused\"" - }, - "value": "OptimismPortal: paused" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b66caa771ead292be27065b6fdbf17fc2b4f01cda6f3a71dafb599bc9ced165d", - "typeString": "literal_string \"OptimismPortal: paused\"" - } - ], - "id": 59388, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4740:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4740:50:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59394, - "nodeType": "ExpressionStatement", - "src": "4740:50:110" - }, - { - "id": 59395, - "nodeType": "PlaceholderStatement", - "src": "4800:1:110" - } - ] - }, - "documentation": { - "id": 59386, - "nodeType": "StructuredDocumentation", - "src": "4668:32:110", - "text": "@notice Reverts when paused." - }, - "name": "whenNotPaused", - "nameLocation": "4714:13:110", - "parameters": { - "id": 59387, - "nodeType": "ParameterList", - "parameters": [], - "src": "4727:2:110" - }, - "virtual": false, - "visibility": "internal" - }, - { - "id": 59401, - "nodeType": "VariableDeclaration", - "src": "4878:41:110", - "nodes": [], - "baseFunctions": [ - 75668 - ], - "constant": true, - "documentation": { - "id": 59398, - "nodeType": "StructuredDocumentation", - "src": "4814:59:110", - "text": "@notice Semantic version.\n @custom:semver 1.10.0" - }, - "functionSelector": "54fd4d50", - "mutability": "constant", - "name": "version", - "nameLocation": "4901:7:110", - "scope": 59997, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 59399, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "4878:6:110", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "312e31302e30", - "id": 59400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4911:8:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0da5b5e4c121ebd588f58cd2a27b23bac1ec4a69fdf68241600b139ec2a21f64", - "typeString": "literal_string \"1.10.0\"" - }, - "value": "1.10.0" - }, - "visibility": "public" - }, - { - "id": 59426, - "nodeType": "FunctionDefinition", - "src": "4982:219:110", - "nodes": [], - "body": { - "id": 59425, - "nodeType": "Block", - "src": "4996:205:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 59409, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5065:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 59408, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5057:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 59407, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5057:7:110", - "typeDescriptions": {} - } - }, - "id": 59410, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5057:10:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 59406, - "name": "L2OutputOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59272, - "src": "5042:14:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_L2OutputOracle_$59272_$", - "typeString": "type(contract L2OutputOracle)" - } - }, - "id": 59411, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5042:26:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 59414, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5101:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 59413, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5093:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 59412, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5093:7:110", - "typeDescriptions": {} - } - }, - "id": 59415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5093:10:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 59419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5153:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 59418, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5145:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 59417, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5145:7:110", - "typeDescriptions": {} - } - }, - "id": 59420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5145:10:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 59416, - "name": "SystemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61393, - "src": "5132:12:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_SystemConfig_$61393_$", - "typeString": "type(contract SystemConfig)" - } - }, - "id": 59421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5132:24:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - { - "hexValue": "74727565", - "id": 59422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5179:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 59405, - "name": "initialize", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59469, - "src": "5006:10:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_L2OutputOracle_$59272_$_t_address_$_t_contract$_SystemConfig_$61393_$_t_bool_$returns$__$", - "typeString": "function (contract L2OutputOracle,address,contract SystemConfig,bool)" - } - }, - "id": 59423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [ - "_l2Oracle", - "_guardian", - "_systemConfig", - "_paused" - ], - "nodeType": "FunctionCall", - "src": "5006:188:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59424, - "nodeType": "ExpressionStatement", - "src": "5006:188:110" - } - ] - }, - "documentation": { - "id": 59402, - "nodeType": "StructuredDocumentation", - "src": "4926:51:110", - "text": "@notice Constructs the OptimismPortal contract." - }, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 59403, - "nodeType": "ParameterList", - "parameters": [], - "src": "4993:2:110" - }, - "returnParameters": { - "id": 59404, - "nodeType": "ParameterList", - "parameters": [], - "src": "4996:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 59469, - "nodeType": "FunctionDefinition", - "src": "5491:423:110", - "nodes": [], - "body": { - "id": 59468, - "nodeType": "Block", - "src": "5700:214:110", - "nodes": [], - "statements": [ - { - "expression": { - "id": 59447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59444, - "name": "l2Sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59323, - "src": "5710:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 59445, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "5721:9:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$", - "typeString": "type(library Constants)" - } - }, - "id": 59446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "DEFAULT_L2_SENDER", - "nodeType": "MemberAccess", - "referencedDeclaration": 69529, - "src": "5721:27:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5710:38:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 59448, - "nodeType": "ExpressionStatement", - "src": "5710:38:110" - }, - { - "expression": { - "id": 59451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59449, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "5758:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 59450, - "name": "_l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59430, - "src": "5769:9:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "src": "5758:20:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59452, - "nodeType": "ExpressionStatement", - "src": "5758:20:110" - }, - { - "expression": { - "id": 59455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59453, - "name": "systemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59345, - "src": "5788:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 59454, - "name": "_systemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59435, - "src": "5803:13:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "src": "5788:28:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "id": 59456, - "nodeType": "ExpressionStatement", - "src": "5788:28:110" - }, - { - "expression": { - "id": 59459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59457, - "name": "guardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59348, - "src": "5826:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 59458, - "name": "_guardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59432, - "src": "5837:9:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5826:20:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 59460, - "nodeType": "ExpressionStatement", - "src": "5826:20:110" - }, - { - "expression": { - "id": 59463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59461, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59337, - "src": "5856:6:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 59462, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59437, - "src": "5865:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5856:16:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59464, - "nodeType": "ExpressionStatement", - "src": "5856:16:110" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 59465, - "name": "__ResourceMetering_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60598, - "src": "5882:23:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 59466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5882:25:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59467, - "nodeType": "ExpressionStatement", - "src": "5882:25:110" - } - ] - }, - "documentation": { - "id": 59427, - "nodeType": "StructuredDocumentation", - "src": "5207:279:110", - "text": "@notice Initializer.\n @param _l2Oracle Address of the L2OutputOracle contract.\n @param _guardian Address that can pause withdrawals.\n @param _paused Sets the contract's pausability state.\n @param _systemConfig Address of the SystemConfig contract." - }, - "functionSelector": "fecf9734", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "expression": { - "id": 59440, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "5673:9:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$", - "typeString": "type(library Constants)" - } - }, - "id": 59441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "INITIALIZER", - "nodeType": "MemberAccess", - "referencedDeclaration": 69570, - "src": "5673:21:110", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 59442, - "kind": "modifierInvocation", - "modifierName": { - "id": 59439, - "name": "reinitializer", - "nodeType": "IdentifierPath", - "referencedDeclaration": 32197, - "src": "5659:13:110" - }, - "nodeType": "ModifierInvocation", - "src": "5659:36:110" - } - ], - "name": "initialize", - "nameLocation": "5500:10:110", - "parameters": { - "id": 59438, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59430, - "mutability": "mutable", - "name": "_l2Oracle", - "nameLocation": "5535:9:110", - "nodeType": "VariableDeclaration", - "scope": 59469, - "src": "5520:24:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - }, - "typeName": { - "id": 59429, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59428, - "name": "L2OutputOracle", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59272, - "src": "5520:14:110" - }, - "referencedDeclaration": 59272, - "src": "5520:14:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59432, - "mutability": "mutable", - "name": "_guardian", - "nameLocation": "5562:9:110", - "nodeType": "VariableDeclaration", - "scope": 59469, - "src": "5554:17:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59431, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5554:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59435, - "mutability": "mutable", - "name": "_systemConfig", - "nameLocation": "5594:13:110", - "nodeType": "VariableDeclaration", - "scope": 59469, - "src": "5581:26:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - }, - "typeName": { - "id": 59434, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59433, - "name": "SystemConfig", - "nodeType": "IdentifierPath", - "referencedDeclaration": 61393, - "src": "5581:12:110" - }, - "referencedDeclaration": 61393, - "src": "5581:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59437, - "mutability": "mutable", - "name": "_paused", - "nameLocation": "5622:7:110", - "nodeType": "VariableDeclaration", - "scope": 59469, - "src": "5617:12:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59436, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5617:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5510:125:110" - }, - "returnParameters": { - "id": 59443, - "nodeType": "ParameterList", - "parameters": [], - "src": "5700:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 59479, - "nodeType": "FunctionDefinition", - "src": "5989:92:110", - "nodes": [], - "body": { - "id": 59478, - "nodeType": "Block", - "src": "6049:32:110", - "nodes": [], - "statements": [ - { - "expression": { - "id": 59476, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "6066:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "functionReturnParameters": 59475, - "id": 59477, - "nodeType": "Return", - "src": "6059:15:110" - } - ] - }, - "documentation": { - "id": 59470, - "nodeType": "StructuredDocumentation", - "src": "5920:64:110", - "text": "@notice Getter for the L2OutputOracle\n @custom:legacy" - }, - "functionSelector": "001c2ff6", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "L2_ORACLE", - "nameLocation": "5998:9:110", - "parameters": { - "id": 59471, - "nodeType": "ParameterList", - "parameters": [], - "src": "6007:2:110" - }, - "returnParameters": { - "id": 59475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59474, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59479, - "src": "6033:14:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - }, - "typeName": { - "id": 59473, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59472, - "name": "L2OutputOracle", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59272, - "src": "6033:14:110" - }, - "referencedDeclaration": 59272, - "src": "6033:14:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "visibility": "internal" - } - ], - "src": "6032:16:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 59489, - "nodeType": "FunctionDefinition", - "src": "6154:98:110", - "nodes": [], - "body": { - "id": 59488, - "nodeType": "Block", - "src": "6216:36:110", - "nodes": [], - "statements": [ - { - "expression": { - "id": 59486, - "name": "systemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59345, - "src": "6233:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "functionReturnParameters": 59485, - "id": 59487, - "nodeType": "Return", - "src": "6226:19:110" - } - ] - }, - "documentation": { - "id": 59480, - "nodeType": "StructuredDocumentation", - "src": "6087:62:110", - "text": "@notice Getter for the SystemConfig\n @custom:legacy" - }, - "functionSelector": "f0498750", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "SYSTEM_CONFIG", - "nameLocation": "6163:13:110", - "parameters": { - "id": 59481, - "nodeType": "ParameterList", - "parameters": [], - "src": "6176:2:110" - }, - "returnParameters": { - "id": 59485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59484, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59489, - "src": "6202:12:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - }, - "typeName": { - "id": 59483, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59482, - "name": "SystemConfig", - "nodeType": "IdentifierPath", - "referencedDeclaration": 61393, - "src": "6202:12:110" - }, - "referencedDeclaration": 61393, - "src": "6202:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "visibility": "internal" - } - ], - "src": "6201:14:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 59498, - "nodeType": "FunctionDefinition", - "src": "6321:84:110", - "nodes": [], - "body": { - "id": 59497, - "nodeType": "Block", - "src": "6373:32:110", - "nodes": [], - "statements": [ - { - "expression": { - "id": 59495, - "name": "guardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59348, - "src": "6390:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 59494, - "id": 59496, - "nodeType": "Return", - "src": "6383:15:110" - } - ] - }, - "documentation": { - "id": 59490, - "nodeType": "StructuredDocumentation", - "src": "6258:58:110", - "text": "@notice Getter for the Guardian\n @custom:legacy" - }, - "functionSelector": "724c184c", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "GUARDIAN", - "nameLocation": "6330:8:110", - "parameters": { - "id": 59491, - "nodeType": "ParameterList", - "parameters": [], - "src": "6338:2:110" - }, - "returnParameters": { - "id": 59494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59493, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59498, - "src": "6364:7:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59492, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6364:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6363:9:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 59520, - "nodeType": "FunctionDefinition", - "src": "6447:173:110", - "nodes": [], - "body": { - "id": 59519, - "nodeType": "Block", - "src": "6473:147:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59503, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "6491:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "6491:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 59505, - "name": "guardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59348, - "src": "6505:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6491:22:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e2063616e207061757365", - "id": 59507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6515:41:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a662ad7462f0018e8b171ba19146984ad716c45a2c8d7c903bdd6e1628b95f08", - "typeString": "literal_string \"OptimismPortal: only guardian can pause\"" - }, - "value": "OptimismPortal: only guardian can pause" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_a662ad7462f0018e8b171ba19146984ad716c45a2c8d7c903bdd6e1628b95f08", - "typeString": "literal_string \"OptimismPortal: only guardian can pause\"" - } - ], - "id": 59502, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "6483:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6483:74:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59509, - "nodeType": "ExpressionStatement", - "src": "6483:74:110" - }, - { - "expression": { - "id": 59512, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59510, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59337, - "src": "6567:6:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 59511, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6576:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "6567:13:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59513, - "nodeType": "ExpressionStatement", - "src": "6567:13:110" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 59515, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "6602:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "6602:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 59514, - "name": "Paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59380, - "src": "6595:6:110", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 59517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6595:18:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59518, - "nodeType": "EmitStatement", - "src": "6590:23:110" - } - ] - }, - "documentation": { - "id": 59499, - "nodeType": "StructuredDocumentation", - "src": "6411:31:110", - "text": "@notice Pauses withdrawals." - }, - "functionSelector": "8456cb59", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "pause", - "nameLocation": "6456:5:110", - "parameters": { - "id": 59500, - "nodeType": "ParameterList", - "parameters": [], - "src": "6461:2:110" - }, - "returnParameters": { - "id": 59501, - "nodeType": "ParameterList", - "parameters": [], - "src": "6473:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59542, - "nodeType": "FunctionDefinition", - "src": "6664:180:110", - "nodes": [], - "body": { - "id": 59541, - "nodeType": "Block", - "src": "6692:152:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59525, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "6710:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "6710:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 59527, - "name": "guardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59348, - "src": "6724:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6710:22:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e2063616e20756e7061757365", - "id": 59529, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6734:43:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9b69e94c34df6db33f20b596e1e1d19a7e5843e1b38ae4395fe1bbf64e89e262", - "typeString": "literal_string \"OptimismPortal: only guardian can unpause\"" - }, - "value": "OptimismPortal: only guardian can unpause" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9b69e94c34df6db33f20b596e1e1d19a7e5843e1b38ae4395fe1bbf64e89e262", - "typeString": "literal_string \"OptimismPortal: only guardian can unpause\"" - } - ], - "id": 59524, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "6702:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6702:76:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59531, - "nodeType": "ExpressionStatement", - "src": "6702:76:110" - }, - { - "expression": { - "id": 59534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59532, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59337, - "src": "6788:6:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 59533, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6797:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "6788:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59535, - "nodeType": "ExpressionStatement", - "src": "6788:14:110" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 59537, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "6826:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "6826:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 59536, - "name": "Unpaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59385, - "src": "6817:8:110", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 59539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6817:20:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59540, - "nodeType": "EmitStatement", - "src": "6812:25:110" - } - ] - }, - "documentation": { - "id": 59521, - "nodeType": "StructuredDocumentation", - "src": "6626:33:110", - "text": "@notice Unpauses withdrawals." - }, - "functionSelector": "3f4ba83a", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "unpause", - "nameLocation": "6673:7:110", - "parameters": { - "id": 59522, - "nodeType": "ParameterList", - "parameters": [], - "src": "6680:2:110" - }, - "returnParameters": { - "id": 59523, - "nodeType": "ParameterList", - "parameters": [], - "src": "6692:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59557, - "nodeType": "FunctionDefinition", - "src": "7337:120:110", - "nodes": [], - "body": { - "id": 59556, - "nodeType": "Block", - "src": "7410:47:110", - "nodes": [], - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 59554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 59552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59550, - "name": "_byteCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59545, - "src": "7427:10:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "hexValue": "3136", - "id": 59551, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7440:2:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "7427:15:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "3231303030", - "id": 59553, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7445:5:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_21000_by_1", - "typeString": "int_const 21000" - }, - "value": "21000" - }, - "src": "7427:23:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 59549, - "id": 59555, - "nodeType": "Return", - "src": "7420:30:110" - } - ] - }, - "documentation": { - "id": 59543, - "nodeType": "StructuredDocumentation", - "src": "6850:482:110", - "text": "@notice Computes the minimum gas limit for a deposit.\n The minimum gas limit linearly increases based on the size of the calldata.\n This is to prevent users from creating L2 resource usage without paying for it.\n This function can be used when interacting with the portal to ensure forwards\n compatibility.\n @param _byteCount Number of bytes in the calldata.\n @return The minimum gas limit for a deposit." - }, - "functionSelector": "a35d99df", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "minimumGasLimit", - "nameLocation": "7346:15:110", - "parameters": { - "id": 59546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59545, - "mutability": "mutable", - "name": "_byteCount", - "nameLocation": "7369:10:110", - "nodeType": "VariableDeclaration", - "scope": 59557, - "src": "7362:17:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 59544, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7362:6:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "7361:19:110" - }, - "returnParameters": { - "id": 59549, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59548, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59557, - "src": "7402:6:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 59547, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7402:6:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "7401:8:110" - }, - "scope": 59997, - "stateMutability": "pure", - "virtual": false, - "visibility": "public" - }, - { - "id": 59575, - "nodeType": "FunctionDefinition", - "src": "7878:130:110", - "nodes": [], - "body": { - "id": 59574, - "nodeType": "Block", - "src": "7905:103:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 59562, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "7934:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7934:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 59564, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "7946:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "src": "7946:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 59566, - "name": "RECEIVE_DEFAULT_GAS_LIMIT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59320, - "src": "7957:25:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "hexValue": "66616c7365", - "id": 59567, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7984:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "arguments": [ - { - "hexValue": "", - "id": 59570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7997:2:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 59569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7991:5:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 59568, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7991:5:110", - "typeDescriptions": {} - } - }, - "id": 59571, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7991:9:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 59561, - "name": "depositTransaction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59961, - "src": "7915:18:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,uint256,uint64,bool,bytes memory)" - } - }, - "id": 59572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7915:86:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59573, - "nodeType": "ExpressionStatement", - "src": "7915:86:110" - } - ] - }, - "documentation": { - "id": 59558, - "nodeType": "StructuredDocumentation", - "src": "7463:368:110", - "text": "@notice Accepts value so that users can send ETH directly to this contract and have the\n funds be deposited to their address on L2. This is intended as a convenience\n function for EOAs. Contracts should call the depositTransaction() function directly\n otherwise any deposited funds will be lost due to address aliasing." - }, - "implemented": true, - "kind": "receive", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 59559, - "nodeType": "ParameterList", - "parameters": [], - "src": "7885:2:110" - }, - "returnParameters": { - "id": 59560, - "nodeType": "ParameterList", - "parameters": [], - "src": "7905:0:110" - }, - "scope": 59997, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59580, - "nodeType": "FunctionDefinition", - "src": "8222:77:110", - "nodes": [], - "body": { - "id": 59579, - "nodeType": "Block", - "src": "8260:39:110", - "nodes": [], - "statements": [] - }, - "documentation": { - "id": 59576, - "nodeType": "StructuredDocumentation", - "src": "8014:203:110", - "text": "@notice Accepts ETH value without triggering a deposit to L2.\n This function mainly exists for the sake of the migration between the legacy\n Optimism system and Bedrock." - }, - "functionSelector": "8b4c40b0", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "donateETH", - "nameLocation": "8231:9:110", - "parameters": { - "id": 59577, - "nodeType": "ParameterList", - "parameters": [], - "src": "8240:2:110" - }, - "returnParameters": { - "id": 59578, - "nodeType": "ParameterList", - "parameters": [], - "src": "8260:0:110" - }, - "scope": 59997, - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59593, - "nodeType": "FunctionDefinition", - "src": "8548:152:110", - "nodes": [], - "body": { - "id": 59592, - "nodeType": "Block", - "src": "8647:53:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 59588, - "name": "systemConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59345, - "src": "8664:12:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SystemConfig_$61393", - "typeString": "contract SystemConfig" - } - }, - "id": 59589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "resourceConfig", - "nodeType": "MemberAccess", - "referencedDeclaration": 61313, - "src": "8664:27:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_ResourceConfig_$60283_memory_ptr_$", - "typeString": "function () view external returns (struct ResourceMetering.ResourceConfig memory)" - } - }, - "id": 59590, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8664:29:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ResourceConfig_$60283_memory_ptr", - "typeString": "struct ResourceMetering.ResourceConfig memory" - } - }, - "functionReturnParameters": 59587, - "id": 59591, - "nodeType": "Return", - "src": "8657:36:110" - } - ] - }, - "baseFunctions": [ - 60579 - ], - "documentation": { - "id": 59581, - "nodeType": "StructuredDocumentation", - "src": "8305:238:110", - "text": "@notice Getter for the resource config.\n Used internally by the ResourceMetering contract.\n The SystemConfig is the source of truth for the resource config.\n @return ResourceMetering ResourceConfig" - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_resourceConfig", - "nameLocation": "8557:15:110", - "overrides": { - "id": 59583, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "8589:8:110" - }, - "parameters": { - "id": 59582, - "nodeType": "ParameterList", - "parameters": [], - "src": "8572:2:110" - }, - "returnParameters": { - "id": 59587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59586, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59593, - "src": "8607:38:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ResourceConfig_$60283_memory_ptr", - "typeString": "struct ResourceMetering.ResourceConfig" - }, - "typeName": { - "id": 59585, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59584, - "name": "ResourceMetering.ResourceConfig", - "nodeType": "IdentifierPath", - "referencedDeclaration": 60283, - "src": "8607:31:110" - }, - "referencedDeclaration": 60283, - "src": "8607:31:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ResourceConfig_$60283_storage_ptr", - "typeString": "struct ResourceMetering.ResourceConfig" - } - }, - "visibility": "internal" - } - ], - "src": "8606:40:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "id": 59725, - "nodeType": "FunctionDefinition", - "src": "9088:3746:110", - "nodes": [], - "body": { - "id": 59724, - "nodeType": "Block", - "src": "9353:3481:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59611, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59597, - "src": "9598:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59612, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 70587, - "src": "9598:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "id": 59615, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "9620:4:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OptimismPortal_$59997", - "typeString": "contract OptimismPortal" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OptimismPortal_$59997", - "typeString": "contract OptimismPortal" - } - ], - "id": 59614, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9612:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 59613, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9612:7:110", - "typeDescriptions": {} - } - }, - "id": 59616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9612:13:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9598:27:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e64206d6573736167657320746f2074686520706f7274616c20636f6e7472616374", - "id": 59618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9627:65:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8", - "typeString": "literal_string \"OptimismPortal: you cannot send messages to the portal contract\"" - }, - "value": "OptimismPortal: you cannot send messages to the portal contract" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8", - "typeString": "literal_string \"OptimismPortal: you cannot send messages to the portal contract\"" - } - ], - "id": 59610, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "9590:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9590:103:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59620, - "nodeType": "ExpressionStatement", - "src": "9590:103:110" - }, - { - "assignments": [ - 59622 - ], - "declarations": [ - { - "constant": false, - "id": 59622, - "mutability": "mutable", - "name": "outputRoot", - "nameLocation": "9878:10:110", - "nodeType": "VariableDeclaration", - "scope": 59724, - "src": "9870:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59621, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "9870:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 59628, - "initialValue": { - "expression": { - "arguments": [ - { - "id": 59625, - "name": "_l2OutputIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59599, - "src": "9912:14:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 59623, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "9891:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getL2Output", - "nodeType": "MemberAccess", - "referencedDeclaration": 59112, - "src": "9891:20:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)" - } - }, - "id": 59626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9891:36:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "id": 59627, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "outputRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 70548, - "src": "9891:47:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9870:68:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 59635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59630, - "name": "outputRoot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59622, - "src": "10058:10:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "id": 59633, - "name": "_outputRootProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59602, - "src": "10100:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr", - "typeString": "struct Types.OutputRootProof calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr", - "typeString": "struct Types.OutputRootProof calldata" - } - ], - "expression": { - "id": 59631, - "name": "Hashing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70279, - "src": "10072:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$", - "typeString": "type(library Hashing)" - } - }, - "id": 59632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "hashOutputRootProof", - "nodeType": "MemberAccess", - "referencedDeclaration": 70278, - "src": "10072:27:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_OutputRootProof_$70562_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (struct Types.OutputRootProof memory) pure returns (bytes32)" - } - }, - "id": 59634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10072:45:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "10058:59:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a20696e76616c6964206f757470757420726f6f742070726f6f66", - "id": 59636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10119:43:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996", - "typeString": "literal_string \"OptimismPortal: invalid output root proof\"" - }, - "value": "OptimismPortal: invalid output root proof" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996", - "typeString": "literal_string \"OptimismPortal: invalid output root proof\"" - } - ], - "id": 59629, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "10037:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10037:135:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59638, - "nodeType": "ExpressionStatement", - "src": "10037:135:110" - }, - { - "assignments": [ - 59640 - ], - "declarations": [ - { - "constant": false, - "id": 59640, - "mutability": "mutable", - "name": "withdrawalHash", - "nameLocation": "10291:14:110", - "nodeType": "VariableDeclaration", - "scope": 59724, - "src": "10283:22:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59639, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10283:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 59645, - "initialValue": { - "arguments": [ - { - "id": 59643, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59597, - "src": "10331:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - ], - "expression": { - "id": 59641, - "name": "Hashing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70279, - "src": "10308:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$", - "typeString": "type(library Hashing)" - } - }, - "id": 59642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "hashWithdrawal", - "nodeType": "MemberAccess", - "referencedDeclaration": 70254, - "src": "10308:22:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawalTransaction_$70594_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)" - } - }, - "id": 59644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10308:27:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10283:52:110" - }, - { - "assignments": [ - 59648 - ], - "declarations": [ - { - "constant": false, - "id": 59648, - "mutability": "mutable", - "name": "provenWithdrawal", - "nameLocation": "10369:16:110", - "nodeType": "VariableDeclaration", - "scope": 59724, - "src": "10345:40:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal" - }, - "typeName": { - "id": 59647, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59646, - "name": "ProvenWithdrawal", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59312, - "src": "10345:16:110" - }, - "referencedDeclaration": 59312, - "src": "10345:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal" - } - }, - "visibility": "internal" - } - ], - "id": 59652, - "initialValue": { - "baseExpression": { - "id": 59649, - "name": "provenWithdrawals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59334, - "src": "10388:17:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$", - "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)" - } - }, - "id": 59651, - "indexExpression": { - "id": 59650, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59640, - "src": "10406:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10388:33:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage", - "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10345:76:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 59667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "id": 59657, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59654, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59648, - "src": "10975:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59655, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 59309, - "src": "10975:26:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 59656, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11005:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "10975:31:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 59666, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "expression": { - "id": 59660, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59648, - "src": "11047:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59661, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "l2OutputIndex", - "nodeType": "MemberAccess", - "referencedDeclaration": 59311, - "src": "11047:30:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "expression": { - "id": 59658, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "11026:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getL2Output", - "nodeType": "MemberAccess", - "referencedDeclaration": 59112, - "src": "11026:20:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)" - } - }, - "id": 59662, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11026:52:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "id": 59663, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "outputRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 70548, - "src": "11026:63:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 59664, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59648, - "src": "11093:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59665, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "outputRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 59307, - "src": "11093:27:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "11026:94:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "10975:145:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c20686173682068617320616c7265616479206265656e2070726f76656e", - "id": 59668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11134:57:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0", - "typeString": "literal_string \"OptimismPortal: withdrawal hash has already been proven\"" - }, - "value": "OptimismPortal: withdrawal hash has already been proven" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0", - "typeString": "literal_string \"OptimismPortal: withdrawal hash has already been proven\"" - } - ], - "id": 59653, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "10954:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10954:247:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59670, - "nodeType": "ExpressionStatement", - "src": "10954:247:110" - }, - { - "assignments": [ - 59672 - ], - "declarations": [ - { - "constant": false, - "id": 59672, - "mutability": "mutable", - "name": "storageKey", - "nameLocation": "11445:10:110", - "nodeType": "VariableDeclaration", - "scope": 59724, - "src": "11437:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59671, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11437:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 59683, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 59676, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59640, - "src": "11509:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 59679, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11549:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 59678, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11541:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 59677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11541:7:110", - "typeDescriptions": {} - } - }, - "id": 59680, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11541:10:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 59674, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "11481:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 59675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "11481:10:110", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 59681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11481:147:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 59673, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "11458:9:110", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 59682, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11458:180:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11437:201:110" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 59689, - "name": "storageKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59672, - "src": "12057:10:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 59687, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "12046:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 59688, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "12046:10:110", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 59690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12046:22:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "01", - "id": 59691, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "hexString", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12070:7:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2", - "typeString": "literal_string hex\"01\"" - }, - "value": "\u0001" - }, - { - "id": 59692, - "name": "_withdrawalProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59605, - "src": "12079:16:110", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - { - "expression": { - "id": 59693, - "name": "_outputRootProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59602, - "src": "12097:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr", - "typeString": "struct Types.OutputRootProof calldata" - } - }, - "id": 59694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "messagePasserStorageRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 70559, - "src": "12097:41:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2", - "typeString": "literal_string hex\"01\"" - }, - { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 59685, - "name": "SecureMerkleTrie", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 72279, - "src": "11991:16:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_SecureMerkleTrie_$72279_$", - "typeString": "type(library SecureMerkleTrie)" - } - }, - "id": 59686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verifyInclusionProof", - "nodeType": "MemberAccess", - "referencedDeclaration": 72231, - "src": "11991:37:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes memory,bytes memory,bytes memory[] memory,bytes32) pure returns (bool)" - } - }, - "id": 59695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11991:161:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a20696e76616c6964207769746864726177616c20696e636c7573696f6e2070726f6f66", - "id": 59696, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12166:52:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9", - "typeString": "literal_string \"OptimismPortal: invalid withdrawal inclusion proof\"" - }, - "value": "OptimismPortal: invalid withdrawal inclusion proof" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9", - "typeString": "literal_string \"OptimismPortal: invalid withdrawal inclusion proof\"" - } - ], - "id": 59684, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11970:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11970:258:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59698, - "nodeType": "ExpressionStatement", - "src": "11970:258:110" - }, - { - "expression": { - "id": 59714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 59699, - "name": "provenWithdrawals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59334, - "src": "12510:17:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$", - "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)" - } - }, - "id": 59701, - "indexExpression": { - "id": 59700, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59640, - "src": "12528:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12510:33:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage", - "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 59703, - "name": "outputRoot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59622, - "src": "12589:10:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "expression": { - "id": 59706, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "12632:5:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 59707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "12632:15:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 59705, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12624:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 59704, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "12624:7:110", - "typeDescriptions": {} - } - }, - "id": 59708, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12624:24:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - { - "arguments": [ - { - "id": 59711, - "name": "_l2OutputIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59599, - "src": "12685:14:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 59710, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12677:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 59709, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "12677:7:110", - "typeDescriptions": {} - } - }, - "id": 59712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12677:23:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 59702, - "name": "ProvenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59312, - "src": "12546:16:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_ProvenWithdrawal_$59312_storage_ptr_$", - "typeString": "type(struct OptimismPortal.ProvenWithdrawal storage pointer)" - } - }, - "id": 59713, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "outputRoot", - "timestamp", - "l2OutputIndex" - ], - "nodeType": "FunctionCall", - "src": "12546:165:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "src": "12510:201:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage", - "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref" - } - }, - "id": 59715, - "nodeType": "ExpressionStatement", - "src": "12510:201:110" - }, - { - "eventCall": { - "arguments": [ - { - "id": 59717, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59640, - "src": "12788:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 59718, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59597, - "src": "12804:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59719, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 70585, - "src": "12804:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 59720, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59597, - "src": "12816:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59721, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 70587, - "src": "12816:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 59716, - "name": "WithdrawalProven", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59368, - "src": "12771:16:110", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", - "typeString": "function (bytes32,address,address)" - } - }, - "id": 59722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12771:56:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59723, - "nodeType": "EmitStatement", - "src": "12766:61:110" - } - ] - }, - "documentation": { - "id": 59594, - "nodeType": "StructuredDocumentation", - "src": "8706:377:110", - "text": "@notice Proves a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize.\n @param _l2OutputIndex L2 output index to prove against.\n @param _outputRootProof Inclusion proof of the L2ToL1MessagePasser contract's storage root.\n @param _withdrawalProof Inclusion proof of the withdrawal in L2ToL1MessagePasser contract." - }, - "functionSelector": "4870496f", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 59608, - "kind": "modifierInvocation", - "modifierName": { - "id": 59607, - "name": "whenNotPaused", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59397, - "src": "9335:13:110" - }, - "nodeType": "ModifierInvocation", - "src": "9335:13:110" - } - ], - "name": "proveWithdrawalTransaction", - "nameLocation": "9097:26:110", - "parameters": { - "id": 59606, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59597, - "mutability": "mutable", - "name": "_tx", - "nameLocation": "9168:3:110", - "nodeType": "VariableDeclaration", - "scope": 59725, - "src": "9133:38:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction" - }, - "typeName": { - "id": 59596, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59595, - "name": "Types.WithdrawalTransaction", - "nodeType": "IdentifierPath", - "referencedDeclaration": 70594, - "src": "9133:27:110" - }, - "referencedDeclaration": 70594, - "src": "9133:27:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_storage_ptr", - "typeString": "struct Types.WithdrawalTransaction" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59599, - "mutability": "mutable", - "name": "_l2OutputIndex", - "nameLocation": "9189:14:110", - "nodeType": "VariableDeclaration", - "scope": 59725, - "src": "9181:22:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59598, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9181:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59602, - "mutability": "mutable", - "name": "_outputRootProof", - "nameLocation": "9244:16:110", - "nodeType": "VariableDeclaration", - "scope": 59725, - "src": "9213:47:110", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputRootProof_$70562_calldata_ptr", - "typeString": "struct Types.OutputRootProof" - }, - "typeName": { - "id": 59601, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59600, - "name": "Types.OutputRootProof", - "nodeType": "IdentifierPath", - "referencedDeclaration": 70562, - "src": "9213:21:110" - }, - "referencedDeclaration": 70562, - "src": "9213:21:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputRootProof_$70562_storage_ptr", - "typeString": "struct Types.OutputRootProof" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59605, - "mutability": "mutable", - "name": "_withdrawalProof", - "nameLocation": "9287:16:110", - "nodeType": "VariableDeclaration", - "scope": 59725, - "src": "9270:33:110", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 59603, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "9270:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 59604, - "nodeType": "ArrayTypeName", - "src": "9270:7:110", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - } - ], - "src": "9123:186:110" - }, - "returnParameters": { - "id": 59609, - "nodeType": "ParameterList", - "parameters": [], - "src": "9353:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59870, - "nodeType": "FunctionDefinition", - "src": "12947:4839:110", - "nodes": [], - "body": { - "id": 59869, - "nodeType": "Block", - "src": "13049:4737:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59735, - "name": "l2Sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59323, - "src": "13315:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 59736, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "13327:9:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$", - "typeString": "type(library Constants)" - } - }, - "id": 59737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "DEFAULT_L2_SENDER", - "nodeType": "MemberAccess", - "referencedDeclaration": 69529, - "src": "13327:27:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "13315:39:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a2063616e206f6e6c792074726967676572206f6e65207769746864726177616c20706572207472616e73616374696f6e", - "id": 59739, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13356:65:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b", - "typeString": "literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\"" - }, - "value": "OptimismPortal: can only trigger one withdrawal per transaction" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b", - "typeString": "literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\"" - } - ], - "id": 59734, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "13294:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "13294:137:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59741, - "nodeType": "ExpressionStatement", - "src": "13294:137:110" - }, - { - "assignments": [ - 59743 - ], - "declarations": [ - { - "constant": false, - "id": 59743, - "mutability": "mutable", - "name": "withdrawalHash", - "nameLocation": "13522:14:110", - "nodeType": "VariableDeclaration", - "scope": 59869, - "src": "13514:22:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 59742, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "13514:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 59748, - "initialValue": { - "arguments": [ - { - "id": 59746, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "13562:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - ], - "expression": { - "id": 59744, - "name": "Hashing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70279, - "src": "13539:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Hashing_$70279_$", - "typeString": "type(library Hashing)" - } - }, - "id": 59745, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "hashWithdrawal", - "nodeType": "MemberAccess", - "referencedDeclaration": 70254, - "src": "13539:22:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_WithdrawalTransaction_$70594_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)" - } - }, - "id": 59747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "13539:27:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13514:52:110" - }, - { - "assignments": [ - 59751 - ], - "declarations": [ - { - "constant": false, - "id": 59751, - "mutability": "mutable", - "name": "provenWithdrawal", - "nameLocation": "13600:16:110", - "nodeType": "VariableDeclaration", - "scope": 59869, - "src": "13576:40:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal" - }, - "typeName": { - "id": 59750, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59749, - "name": "ProvenWithdrawal", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59312, - "src": "13576:16:110" - }, - "referencedDeclaration": 59312, - "src": "13576:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal" - } - }, - "visibility": "internal" - } - ], - "id": 59755, - "initialValue": { - "baseExpression": { - "id": 59752, - "name": "provenWithdrawals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59334, - "src": "13619:17:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$59312_storage_$", - "typeString": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)" - } - }, - "id": 59754, - "indexExpression": { - "id": 59753, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59743, - "src": "13637:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13619:33:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_storage", - "typeString": "struct OptimismPortal.ProvenWithdrawal storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13576:76:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "id": 59760, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59757, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59751, - "src": "13902:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59758, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 59309, - "src": "13902:26:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 59759, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13932:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "13902:31:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e6f74206265656e2070726f76656e20796574", - "id": 59761, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13935:52:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610", - "typeString": "literal_string \"OptimismPortal: withdrawal has not been proven yet\"" - }, - "value": "OptimismPortal: withdrawal has not been proven yet" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610", - "typeString": "literal_string \"OptimismPortal: withdrawal has not been proven yet\"" - } - ], - "id": 59756, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "13894:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "13894:94:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59763, - "nodeType": "ExpressionStatement", - "src": "13894:94:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 59770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59765, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59751, - "src": "14275:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59766, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 59309, - "src": "14275:26:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 59767, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "14305:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "startingTimestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 58789, - "src": "14305:26:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 59769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "14305:28:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "14275:58:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657374616d70206c657373207468616e204c32204f7261636c65207374617274696e672074696d657374616d70", - "id": 59771, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14347:77:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd", - "typeString": "literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\"" - }, - "value": "OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd", - "typeString": "literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\"" - } - ], - "id": 59764, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "14254:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "14254:180:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59773, - "nodeType": "ExpressionStatement", - "src": "14254:180:110" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 59776, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59751, - "src": "14853:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59777, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 59309, - "src": "14853:26:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 59775, - "name": "_isFinalizationPeriodElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59996, - "src": "14824:28:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) view returns (bool)" - } - }, - "id": 59778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "14824:56:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a2070726f76656e207769746864726177616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564", - "id": 59779, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14894:71:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70", - "typeString": "literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\"" - }, - "value": "OptimismPortal: proven withdrawal finalization period has not elapsed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70", - "typeString": "literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\"" - } - ], - "id": 59774, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "14803:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "14803:172:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59781, - "nodeType": "ExpressionStatement", - "src": "14803:172:110" - }, - { - "assignments": [ - 59786 - ], - "declarations": [ - { - "constant": false, - "id": 59786, - "mutability": "mutable", - "name": "proposal", - "nameLocation": "15174:8:110", - "nodeType": "VariableDeclaration", - "scope": 59869, - "src": "15146:36:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal" - }, - "typeName": { - "id": 59785, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59784, - "name": "Types.OutputProposal", - "nodeType": "IdentifierPath", - "referencedDeclaration": 70553, - "src": "15146:20:110" - }, - "referencedDeclaration": 70553, - "src": "15146:20:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_storage_ptr", - "typeString": "struct Types.OutputProposal" - } - }, - "visibility": "internal" - } - ], - "id": 59792, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 59789, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59751, - "src": "15206:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59790, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "l2OutputIndex", - "nodeType": "MemberAccess", - "referencedDeclaration": 59311, - "src": "15206:30:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "expression": { - "id": 59787, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "15185:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getL2Output", - "nodeType": "MemberAccess", - "referencedDeclaration": 59112, - "src": "15185:20:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)" - } - }, - "id": 59791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15185:52:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15146:91:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 59798, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59794, - "name": "proposal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59786, - "src": "15525:8:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "id": 59795, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "outputRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 70548, - "src": "15525:19:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 59796, - "name": "provenWithdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59751, - "src": "15548:16:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProvenWithdrawal_$59312_memory_ptr", - "typeString": "struct OptimismPortal.ProvenWithdrawal memory" - } - }, - "id": 59797, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "outputRoot", - "nodeType": "MemberAccess", - "referencedDeclaration": 59307, - "src": "15548:27:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "15525:50:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f76656e206973206e6f74207468652073616d652061732063757272656e74206f757470757420726f6f74", - "id": 59799, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15589:75:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280", - "typeString": "literal_string \"OptimismPortal: output root proven is not the same as current output root\"" - }, - "value": "OptimismPortal: output root proven is not the same as current output root" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280", - "typeString": "literal_string \"OptimismPortal: output root proven is not the same as current output root\"" - } - ], - "id": 59793, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "15504:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59800, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15504:170:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59801, - "nodeType": "ExpressionStatement", - "src": "15504:170:110" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 59804, - "name": "proposal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59786, - "src": "15802:8:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "id": 59805, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 70550, - "src": "15802:18:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 59803, - "name": "_isFinalizationPeriodElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59996, - "src": "15773:28:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) view returns (bool)" - } - }, - "id": 59806, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15773:48:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564", - "id": 59807, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15835:69:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74", - "typeString": "literal_string \"OptimismPortal: output proposal finalization period has not elapsed\"" - }, - "value": "OptimismPortal: output proposal finalization period has not elapsed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74", - "typeString": "literal_string \"OptimismPortal: output proposal finalization period has not elapsed\"" - } - ], - "id": 59802, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "15752:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15752:162:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59809, - "nodeType": "ExpressionStatement", - "src": "15752:162:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 59815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 59811, - "name": "finalizedWithdrawals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59328, - "src": "16030:20:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - } - }, - "id": 59813, - "indexExpression": { - "id": 59812, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59743, - "src": "16051:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16030:36:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "66616c7365", - "id": 59814, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16070:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "16030:45:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c2068617320616c7265616479206265656e2066696e616c697a6564", - "id": 59816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16077:55:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485", - "typeString": "literal_string \"OptimismPortal: withdrawal has already been finalized\"" - }, - "value": "OptimismPortal: withdrawal has already been finalized" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485", - "typeString": "literal_string \"OptimismPortal: withdrawal has already been finalized\"" - } - ], - "id": 59810, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "16022:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59817, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16022:111:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59818, - "nodeType": "ExpressionStatement", - "src": "16022:111:110" - }, - { - "expression": { - "id": 59823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 59819, - "name": "finalizedWithdrawals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59328, - "src": "16213:20:110", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - } - }, - "id": 59821, - "indexExpression": { - "id": 59820, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59743, - "src": "16234:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "16213:36:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 59822, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16252:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "16213:43:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59824, - "nodeType": "ExpressionStatement", - "src": "16213:43:110" - }, - { - "expression": { - "id": 59828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59825, - "name": "l2Sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59323, - "src": "16350:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 59826, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "16361:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59827, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 70585, - "src": "16361:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "16350:21:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 59829, - "nodeType": "ExpressionStatement", - "src": "16350:21:110" - }, - { - "assignments": [ - 59831 - ], - "declarations": [ - { - "constant": false, - "id": 59831, - "mutability": "mutable", - "name": "success", - "nameLocation": "16996:7:110", - "nodeType": "VariableDeclaration", - "scope": 59869, - "src": "16991:12:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59830, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "16991:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 59843, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 59834, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "17030:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59835, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 70587, - "src": "17030:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 59836, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "17042:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59837, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "gasLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 70591, - "src": "17042:12:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 59838, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "17056:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59839, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": 70589, - "src": "17056:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 59840, - "name": "_tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59729, - "src": "17067:3:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction memory" - } - }, - "id": 59841, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "data", - "nodeType": "MemberAccess", - "referencedDeclaration": 70593, - "src": "17067:8:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 59832, - "name": "SafeCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 70479, - "src": "17006:8:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_SafeCall_$70479_$", - "typeString": "type(library SafeCall)" - } - }, - "id": 59833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "callWithMinGas", - "nodeType": "MemberAccess", - "referencedDeclaration": 70478, - "src": "17006:23:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (address,uint256,uint256,bytes memory) returns (bool)" - } - }, - "id": 59842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17006:70:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16991:85:110" - }, - { - "expression": { - "id": 59847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59844, - "name": "l2Sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59323, - "src": "17144:8:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 59845, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "17155:9:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$", - "typeString": "type(library Constants)" - } - }, - "id": 59846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "DEFAULT_L2_SENDER", - "nodeType": "MemberAccess", - "referencedDeclaration": 69529, - "src": "17155:27:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "17144:38:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 59848, - "nodeType": "ExpressionStatement", - "src": "17144:38:110" - }, - { - "eventCall": { - "arguments": [ - { - "id": 59850, - "name": "withdrawalHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59743, - "src": "17361:14:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 59851, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59831, - "src": "17377:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 59849, - "name": "WithdrawalFinalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59375, - "src": "17341:19:110", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$", - "typeString": "function (bytes32,bool)" - } - }, - "id": 59852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17341:44:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59853, - "nodeType": "EmitStatement", - "src": "17336:49:110" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 59862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 59856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59854, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59831, - "src": "17649:7:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "66616c7365", - "id": 59855, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17660:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "17649:16:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59857, - "name": "tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -26, - "src": "17669:2:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_transaction", - "typeString": "tx" - } - }, - "id": 59858, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "origin", - "nodeType": "MemberAccess", - "src": "17669:9:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 59859, - "name": "Constants", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69571, - "src": "17682:9:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Constants_$69571_$", - "typeString": "type(library Constants)" - } - }, - "id": 59860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "ESTIMATION_ADDRESS", - "nodeType": "MemberAccess", - "referencedDeclaration": 69525, - "src": "17682:28:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "17669:41:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "17649:61:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59868, - "nodeType": "IfStatement", - "src": "17645:135:110", - "trueBody": { - "id": 59867, - "nodeType": "Block", - "src": "17712:68:110", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6564", - "id": 59864, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17733:35:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a0543a16ebb14b11743ebd89913eeb3a89aab6ee2824b60e6e93ee3d5b6c55bb", - "typeString": "literal_string \"OptimismPortal: withdrawal failed\"" - }, - "value": "OptimismPortal: withdrawal failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_a0543a16ebb14b11743ebd89913eeb3a89aab6ee2824b60e6e93ee3d5b6c55bb", - "typeString": "literal_string \"OptimismPortal: withdrawal failed\"" - } - ], - "id": 59863, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -19, - -19 - ], - "referencedDeclaration": -19, - "src": "17726:6:110", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 59865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17726:43:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59866, - "nodeType": "ExpressionStatement", - "src": "17726:43:110" - } - ] - } - } - ] - }, - "documentation": { - "id": 59726, - "nodeType": "StructuredDocumentation", - "src": "12840:102:110", - "text": "@notice Finalizes a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize." - }, - "functionSelector": "8c3152e9", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 59732, - "kind": "modifierInvocation", - "modifierName": { - "id": 59731, - "name": "whenNotPaused", - "nodeType": "IdentifierPath", - "referencedDeclaration": 59397, - "src": "13035:13:110" - }, - "nodeType": "ModifierInvocation", - "src": "13035:13:110" - } - ], - "name": "finalizeWithdrawalTransaction", - "nameLocation": "12956:29:110", - "parameters": { - "id": 59730, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59729, - "mutability": "mutable", - "name": "_tx", - "nameLocation": "13021:3:110", - "nodeType": "VariableDeclaration", - "scope": 59870, - "src": "12986:38:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_memory_ptr", - "typeString": "struct Types.WithdrawalTransaction" - }, - "typeName": { - "id": 59728, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 59727, - "name": "Types.WithdrawalTransaction", - "nodeType": "IdentifierPath", - "referencedDeclaration": 70594, - "src": "12986:27:110" - }, - "referencedDeclaration": 70594, - "src": "12986:27:110", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WithdrawalTransaction_$70594_storage_ptr", - "typeString": "struct Types.WithdrawalTransaction" - } - }, - "visibility": "internal" - } - ], - "src": "12985:40:110" - }, - "returnParameters": { - "id": 59733, - "nodeType": "ParameterList", - "parameters": [], - "src": "13049:0:110" - }, - "scope": 59997, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 59961, - "nodeType": "FunctionDefinition", - "src": "18516:1971:110", - "nodes": [], - "body": { - "id": 59960, - "nodeType": "Block", - "src": "18737:1750:110", - "nodes": [], - "statements": [ - { - "condition": { - "id": 59887, - "name": "_isCreation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59879, - "src": "18876:11:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59899, - "nodeType": "IfStatement", - "src": "18872:136:110", - "trueBody": { - "id": 59898, - "nodeType": "Block", - "src": "18889:119:110", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59889, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59873, - "src": "18911:3:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 59892, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18926:1:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 59891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18918:7:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 59890, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18918:7:110", - "typeDescriptions": {} - } - }, - "id": 59893, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18918:10:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "18911:17:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646472657373283029207768656e206372656174696e67206120636f6e7472616374", - "id": 59895, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18930:66:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_35a8c36d4f7649c8575025c089af07faab9c54040307e9d6ec8463fe4050a639", - "typeString": "literal_string \"OptimismPortal: must send to address(0) when creating a contract\"" - }, - "value": "OptimismPortal: must send to address(0) when creating a contract" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_35a8c36d4f7649c8575025c089af07faab9c54040307e9d6ec8463fe4050a639", - "typeString": "literal_string \"OptimismPortal: must send to address(0) when creating a contract\"" - } - ], - "id": 59888, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "18903:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18903:94:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59897, - "nodeType": "ExpressionStatement", - "src": "18903:94:110" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 59909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59901, - "name": "_gasLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59877, - "src": "19163:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 59905, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59881, - "src": "19199:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 59906, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "src": "19199:12:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 59904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "19192:6:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 59903, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "19192:6:110", - "typeDescriptions": {} - } - }, - "id": 59907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "19192:20:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 59902, - "name": "minimumGasLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59557, - "src": "19176:15:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint64_$returns$_t_uint64_$", - "typeString": "function (uint64) pure returns (uint64)" - } - }, - "id": 59908, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "19176:37:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "19163:50:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d616c6c", - "id": 59910, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19215:37:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0a0c886a0c5bbb9f3e1be0cff5d8eb64eb65c2a072ac278a98f80049a2d6c3f8", - "typeString": "literal_string \"OptimismPortal: gas limit too small\"" - }, - "value": "OptimismPortal: gas limit too small" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_0a0c886a0c5bbb9f3e1be0cff5d8eb64eb65c2a072ac278a98f80049a2d6c3f8", - "typeString": "literal_string \"OptimismPortal: gas limit too small\"" - } - ], - "id": 59900, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "19155:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "19155:98:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59912, - "nodeType": "ExpressionStatement", - "src": "19155:98:110" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 59917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59914, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59881, - "src": "19632:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 59915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "src": "19632:12:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "hexValue": "3132305f303030", - "id": 59916, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19648:7:110", - "typeDescriptions": { - "typeIdentifier": "t_rational_120000_by_1", - "typeString": "int_const 120000" - }, - "value": "120_000" - }, - "src": "19632:23:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765", - "id": 59918, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19657:32:110", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ed1d4c6d62337124a330de9c9e42dcf809033e5ae909544279fbaee2e389020b", - "typeString": "literal_string \"OptimismPortal: data too large\"" - }, - "value": "OptimismPortal: data too large" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ed1d4c6d62337124a330de9c9e42dcf809033e5ae909544279fbaee2e389020b", - "typeString": "literal_string \"OptimismPortal: data too large\"" - } - ], - "id": 59913, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "19624:7:110", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 59919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "19624:66:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59920, - "nodeType": "ExpressionStatement", - "src": "19624:66:110" - }, - { - "assignments": [ - 59922 - ], - "declarations": [ - { - "constant": false, - "id": 59922, - "mutability": "mutable", - "name": "from", - "nameLocation": "19789:4:110", - "nodeType": "VariableDeclaration", - "scope": 59960, - "src": "19781:12:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59921, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19781:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 59925, - "initialValue": { - "expression": { - "id": 59923, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "19796:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "19796:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19781:25:110" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 59930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59926, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "19820:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "19820:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 59928, - "name": "tx", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -26, - "src": "19834:2:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_transaction", - "typeString": "tx" - } - }, - "id": 59929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "origin", - "nodeType": "MemberAccess", - "src": "19834:9:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "19820:23:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 59940, - "nodeType": "IfStatement", - "src": "19816:108:110", - "trueBody": { - "id": 59939, - "nodeType": "Block", - "src": "19845:79:110", - "statements": [ - { - "expression": { - "id": 59937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59931, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59922, - "src": "19859:4:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 59934, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "19902:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "19902:10:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 59932, - "name": "AddressAliasHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 78127, - "src": "19866:18:110", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressAliasHelper_$78127_$", - "typeString": "type(library AddressAliasHelper)" - } - }, - "id": 59933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "applyL1ToL2Alias", - "nodeType": "MemberAccess", - "referencedDeclaration": 78104, - "src": "19866:35:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$", - "typeString": "function (address) pure returns (address)" - } - }, - "id": 59936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "19866:47:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "19859:54:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 59938, - "nodeType": "ExpressionStatement", - "src": "19859:54:110" - } - ] - } - }, - { - "assignments": [ - 59942 - ], - "declarations": [ - { - "constant": false, - "id": 59942, - "mutability": "mutable", - "name": "opaqueData", - "nameLocation": "20194:10:110", - "nodeType": "VariableDeclaration", - "scope": 59960, - "src": "20181:23:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 59941, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "20181:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 59952, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 59945, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "20224:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 59946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "src": "20224:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 59947, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59875, - "src": "20235:6:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 59948, - "name": "_gasLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59877, - "src": "20243:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 59949, - "name": "_isCreation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59879, - "src": "20254:11:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 59950, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59881, - "src": "20267:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 59943, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "20207:3:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 59944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "20207:16:110", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 59951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20207:66:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20181:92:110" - }, - { - "eventCall": { - "arguments": [ - { - "id": 59954, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59922, - "src": "20441:4:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 59955, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59873, - "src": "20447:3:110", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 59956, - "name": "DEPOSIT_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59316, - "src": "20452:15:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 59957, - "name": "opaqueData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59942, - "src": "20469:10:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 59953, - "name": "TransactionDeposited", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59359, - "src": "20420:20:110", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,address,uint256,bytes memory)" - } - }, - "id": 59958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20420:60:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59959, - "nodeType": "EmitStatement", - "src": "20415:65:110" - } - ] - }, - "documentation": { - "id": 59871, - "nodeType": "StructuredDocumentation", - "src": "17792:719:110", - "text": "@notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in\n deriving deposit transactions. Note that if a deposit is made by a contract, its\n address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider\n using the CrossDomainMessenger contracts for a simpler developer experience.\n @param _to Target address on L2.\n @param _value ETH value to send to the recipient.\n @param _gasLimit Amount of L2 gas to purchase by burning gas on L1.\n @param _isCreation Whether or not the transaction is a contract creation.\n @param _data Data to trigger the recipient with." - }, - "functionSelector": "e9e05c42", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 59884, - "name": "_gasLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59877, - "src": "18722:9:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "id": 59885, - "kind": "modifierInvocation", - "modifierName": { - "id": 59883, - "name": "metered", - "nodeType": "IdentifierPath", - "referencedDeclaration": 60309, - "src": "18714:7:110" - }, - "nodeType": "ModifierInvocation", - "src": "18714:18:110" - } - ], - "name": "depositTransaction", - "nameLocation": "18525:18:110", - "parameters": { - "id": 59882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59873, - "mutability": "mutable", - "name": "_to", - "nameLocation": "18561:3:110", - "nodeType": "VariableDeclaration", - "scope": 59961, - "src": "18553:11:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 59872, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18553:7:110", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59875, - "mutability": "mutable", - "name": "_value", - "nameLocation": "18582:6:110", - "nodeType": "VariableDeclaration", - "scope": 59961, - "src": "18574:14:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59874, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18574:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59877, - "mutability": "mutable", - "name": "_gasLimit", - "nameLocation": "18605:9:110", - "nodeType": "VariableDeclaration", - "scope": 59961, - "src": "18598:16:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 59876, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "18598:6:110", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59879, - "mutability": "mutable", - "name": "_isCreation", - "nameLocation": "18629:11:110", - "nodeType": "VariableDeclaration", - "scope": 59961, - "src": "18624:16:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59878, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "18624:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 59881, - "mutability": "mutable", - "name": "_data", - "nameLocation": "18663:5:110", - "nodeType": "VariableDeclaration", - "scope": 59961, - "src": "18650:18:110", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 59880, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "18650:5:110", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "18543:131:110" - }, - "returnParameters": { - "id": 59886, - "nodeType": "ParameterList", - "parameters": [], - "src": "18737:0:110" - }, - "scope": 59997, - "stateMutability": "payable", - "virtual": false, - "visibility": "public" - }, - { - "id": 59978, - "nodeType": "FunctionDefinition", - "src": "20785:180:110", - "nodes": [], - "body": { - "id": 59977, - "nodeType": "Block", - "src": "20865:100:110", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 59972, - "name": "_l2OutputIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59964, - "src": "20932:14:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 59970, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "20911:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getL2Output", - "nodeType": "MemberAccess", - "referencedDeclaration": 59112, - "src": "20911:20:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$70553_memory_ptr_$", - "typeString": "function (uint256) view external returns (struct Types.OutputProposal memory)" - } - }, - "id": 59973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20911:36:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OutputProposal_$70553_memory_ptr", - "typeString": "struct Types.OutputProposal memory" - } - }, - "id": 59974, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": 70550, - "src": "20911:46:110", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 59969, - "name": "_isFinalizationPeriodElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59996, - "src": "20882:28:110", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) view returns (bool)" - } - }, - "id": 59975, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20882:76:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 59968, - "id": 59976, - "nodeType": "Return", - "src": "20875:83:110" - } - ] - }, - "documentation": { - "id": 59962, - "nodeType": "StructuredDocumentation", - "src": "20493:287:110", - "text": "@notice Determine if a given output is finalized.\n Reverts if the call to L2_ORACLE.getL2Output reverts.\n Returns a boolean otherwise.\n @param _l2OutputIndex Index of the L2 output to check.\n @return Whether or not the output is finalized." - }, - "functionSelector": "6dbffb78", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isOutputFinalized", - "nameLocation": "20794:17:110", - "parameters": { - "id": 59965, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59964, - "mutability": "mutable", - "name": "_l2OutputIndex", - "nameLocation": "20820:14:110", - "nodeType": "VariableDeclaration", - "scope": 59978, - "src": "20812:22:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59963, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20812:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "20811:24:110" - }, - "returnParameters": { - "id": 59968, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59967, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59978, - "src": "20859:4:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59966, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "20859:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "20858:6:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 59996, - "nodeType": "FunctionDefinition", - "src": "21218:180:110", - "nodes": [], - "body": { - "id": 59995, - "nodeType": "Block", - "src": "21305:93:110", - "nodes": [], - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 59993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 59986, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "21322:5:110", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 59987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "21322:15:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 59992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 59988, - "name": "_timestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59981, - "src": "21340:10:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 59989, - "name": "l2Oracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 59341, - "src": "21353:8:110", - "typeDescriptions": { - "typeIdentifier": "t_contract$_L2OutputOracle_$59272", - "typeString": "contract L2OutputOracle" - } - }, - "id": 59990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "FINALIZATION_PERIOD_SECONDS", - "nodeType": "MemberAccess", - "referencedDeclaration": 58783, - "src": "21353:36:110", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 59991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "21353:38:110", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21340:51:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21322:69:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 59985, - "id": 59994, - "nodeType": "Return", - "src": "21315:76:110" - } - ] - }, - "documentation": { - "id": 59979, - "nodeType": "StructuredDocumentation", - "src": "20971:242:110", - "text": "@notice Determines whether the finalization period has elapsed with respect to\n the provided block timestamp.\n @param _timestamp Timestamp to check.\n @return Whether or not the finalization period has elapsed." - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isFinalizationPeriodElapsed", - "nameLocation": "21227:28:110", - "parameters": { - "id": 59982, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59981, - "mutability": "mutable", - "name": "_timestamp", - "nameLocation": "21264:10:110", - "nodeType": "VariableDeclaration", - "scope": 59996, - "src": "21256:18:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59980, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "21256:7:110", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "21255:20:110" - }, - "returnParameters": { - "id": 59985, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59984, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 59996, - "src": "21299:4:110", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 59983, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "21299:4:110", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "21298:6:110" - }, - "scope": 59997, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 59300, - "name": "Initializable", - "nodeType": "IdentifierPath", - "referencedDeclaration": 32244, - "src": "1162:13:110" - }, - "id": 59301, - "nodeType": "InheritanceSpecifier", - "src": "1162:13:110" - }, - { - "baseName": { - "id": 59302, - "name": "ResourceMetering", - "nodeType": "IdentifierPath", - "referencedDeclaration": 60599, - "src": "1177:16:110" - }, - "id": 59303, - "nodeType": "InheritanceSpecifier", - "src": "1177:16:110" - }, - { - "baseName": { - "id": 59304, - "name": "ISemver", - "nodeType": "IdentifierPath", - "referencedDeclaration": 75669, - "src": "1195:7:110" - }, - "id": 59305, - "nodeType": "InheritanceSpecifier", - "src": "1195:7:110" - } - ], - "canonicalName": "OptimismPortal", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 59299, - "nodeType": "StructuredDocumentation", - "src": "797:338:110", - "text": "@custom:proxied\n @title OptimismPortal\n @notice The OptimismPortal is a low-level contract responsible for passing messages between L1\n and L2. Messages sent directly to the OptimismPortal have no form of replayability.\n Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." - }, - "fullyImplemented": true, - "linearizedBaseContracts": [ - 59997, - 75669, - 60599, - 32244 - ], - "name": "OptimismPortal", - "nameLocation": "1144:14:110", - "scope": 59998, - "usedErrors": [] - } - ], - "license": "MIT" - }, - "id": 110 -} \ No newline at end of file diff --git a/packages/chain-mon/src/fault-mon/README.md b/packages/chain-mon/src/fault-mon/README.md deleted file mode 100644 index eec7dcee7f70..000000000000 --- a/packages/chain-mon/src/fault-mon/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# @eth-optimism/fault-mon - -[![codecov](https://codecov.io/gh/ethereum-optimism/optimism/branch/develop/graph/badge.svg?token=0VTG7PG7YR&flag=fault-detector-tests)](https://codecov.io/gh/ethereum-optimism/optimism) - -The `fault-mon` is a simple service for detecting discrepancies between your local view of the Optimism network and the L2 output proposals published to Ethereum. - -## Installation - -Clone, install, and build the Optimism monorepo: - -``` -git clone https://github.com/ethereum-optimism/optimism.git -pnpm install -pnpm build -``` - -## Running the service - -Copy `.env.example` into a new file named `.env`, then set the environment variables listed there. Additional env settings are listed on `--help`. If running the fault detector against -a custom op chain, the `OptimismPortal` contract addresses must also be set associated with the op-chain. - -Once your environment variables or flags have been set, run the service via: - -``` -pnpm start -``` - -## Ports - -- API is exposed at `$FAULT_DETECTOR__HOSTNAME:$FAULT_DETECTOR__PORT/api` -- Metrics are exposed at `$FAULT_DETECTOR__HOSTNAME:$FAULT_DETECTOR__PORT/metrics` -- `$FAULT_DETECTOR__HOSTNAME` defaults to `0.0.0.0` -- `$FAULT_DETECTOR__PORT` defaults to `7300` - -## What this service does - -The `fault-mon` detects differences between the transaction results generated by your local Optimism node and the transaction results actually published to Ethereum. -Currently, transaction results take the form of [the root of the Optimism state trie](https://medium.com/@eiki1212/ethereum-state-trie-architecture-explained-a30237009d4e). - -The state root of the block is published to the [`L2OutputOracle`](https://github.com/ethereum-optimism/optimism/blob/39b7262cc3ffd78cd314341b8512b2683c1d9af7/packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol) contract on Ethereum. - - ***Note***: The service accepts the `OptimismPortal` as a flag instead of the `L2OutputOracle` for backwards compatibility with early versions of these contracts. The `L2OutputOracle` - is inferred from the portal contract. - -We can therefore detect differences by, for each block, checking the state root of the given block as reported by an Optimism node and the state root as published to Ethereum. - -We export a series of Prometheus metrics that you can use to trigger alerting when issues are detected. -Check the list of available metrics via `pnpm start --help`: - -```sh -> pnpm start --help -$ tsx ./src/service.ts --help -Usage: service [options] - -Options: - --l1rpcprovider Provider for interacting with L1 (env: FAULT_DETECTOR__L1_RPC_PROVIDER) - --l2rpcprovider Provider for interacting with L2 (env: FAULT_DETECTOR__L2_RPC_PROVIDER) - --startbatchindex Batch index to start checking from. Setting it to -1 will cause the fault detector to find the first state batch index that has not yet passed the fault proof window (env: FAULT_DETECTOR__START_BATCH_INDEX, default value: -1) - --loopintervalms Loop interval in milliseconds (env: FAULT_DETECTOR__LOOP_INTERVAL_MS) - --optimismportaladdress [Custom OP Chains] Deployed OptimismPortal contract address. Used to retrieve necessary info for output verification (env: FAULT_DETECTOR__OPTIMISM_PORTAL_ADDRESS, default 0x0) - - --port Port for the app server (env: FAULT_DETECTOR__PORT) - --hostname Hostname for the app server (env: FAULT_DETECTOR__HOSTNAME) - -h, --help display help for command - -Metrics: - highest_checked_batch_index Highest good batch index (type: Gauge) - highest_known_batch_index Highest known batch index (type: Gauge) - is_currently_mismatched 0 if state is ok, 1 if state is mismatched (type: Gauge) - l1_node_connection_failures Number of times L1 node connection has failed (type: Gauge) - l2_node_connection_failures Number of times L2 node connection has failed (type: Gauge) - metadata Service metadata (type: Gauge) - unhandled_errors Unhandled errors (type: Counter) -``` diff --git a/packages/chain-mon/src/fault-mon/helpers.ts b/packages/chain-mon/src/fault-mon/helpers.ts deleted file mode 100644 index 438d419e37c8..000000000000 --- a/packages/chain-mon/src/fault-mon/helpers.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Contract } from 'ethers' -import { Logger } from '@eth-optimism/common-ts' -import { BedrockOutputData } from '@eth-optimism/core-utils' - -/** - * Finds the BedrockOutputData that corresponds to a given output index. - * - * @param oracle Output oracle contract - * @param index Output index to search for. - * @returns BedrockOutputData corresponding to the output index. - */ -export const findOutputForIndex = async ( - oracle: Contract, - index: number, - logger?: Logger -): Promise => { - try { - const proposal = await oracle.getL2Output(index) - return { - outputRoot: proposal.outputRoot, - l1Timestamp: proposal.timestamp.toNumber(), - l2BlockNumber: proposal.l2BlockNumber.toNumber(), - l2OutputIndex: index, - } - } catch (err) { - logger?.fatal('error when calling L2OuputOracle.getL2Output', { - errors: err, - }) - throw new Error(`unable to find output for index ${index}`) - } -} - -/** - * Finds the first L2 output index that has not yet passed the fault proof window. - * - * @param oracle Output oracle contract. - * @returns Starting L2 output index. - */ -export const findFirstUnfinalizedOutputIndex = async ( - oracle: Contract, - fpw: number, - logger?: Logger -): Promise => { - const latestBlock = await oracle.provider.getBlock('latest') - const totalOutputs = (await oracle.nextOutputIndex()).toNumber() - - // Perform a binary search to find the next batch that will pass the challenge period. - let lo = 0 - let hi = totalOutputs - while (lo !== hi) { - const mid = Math.floor((lo + hi) / 2) - const outputData = await findOutputForIndex(oracle, mid, logger) - - if (outputData.l1Timestamp + fpw < latestBlock.timestamp) { - lo = mid + 1 - } else { - hi = mid - } - } - - // Result will be zero if the chain is less than FPW seconds old. Only returns undefined in the - // case that no batches have been submitted for an entire challenge period. - if (lo === totalOutputs) { - return undefined - } else { - return lo - } -} diff --git a/packages/chain-mon/src/fault-mon/index.ts b/packages/chain-mon/src/fault-mon/index.ts deleted file mode 100644 index e787cf766e23..000000000000 --- a/packages/chain-mon/src/fault-mon/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './service' -export * from './helpers' diff --git a/packages/chain-mon/src/fault-mon/service.ts b/packages/chain-mon/src/fault-mon/service.ts deleted file mode 100644 index b86f406c9125..000000000000 --- a/packages/chain-mon/src/fault-mon/service.ts +++ /dev/null @@ -1,420 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - ExpressRouter, - Gauge, - validators, - waitForProvider, -} from '@eth-optimism/common-ts' -import { - BedrockOutputData, - getChainId, - sleep, - toRpcHexString, -} from '@eth-optimism/core-utils' -import { config } from 'dotenv' -import { - CONTRACT_ADDRESSES, - CrossChainMessenger, - getOEContract, - L2ChainID, - OEL1ContractsLike, -} from '@eth-optimism/sdk' -import { Provider } from '@ethersproject/abstract-provider' -import { Contract, ethers } from 'ethers' -import dateformat from 'dateformat' - -import { version } from '../../package.json' -import { findFirstUnfinalizedOutputIndex, findOutputForIndex } from './helpers' - -type Options = { - l1RpcProvider: Provider - l2RpcProvider: Provider - startOutputIndex: number - optimismPortalAddress?: string -} - -type Metrics = { - highestOutputIndex: Gauge - isCurrentlyMismatched: Gauge - nodeConnectionFailures: Gauge -} - -type State = { - faultProofWindow: number - outputOracle: Contract - messenger: CrossChainMessenger - currentOutputIndex: number - diverged: boolean -} - -export class FaultDetector extends BaseServiceV2 { - constructor(options?: Partial) { - super({ - version, - name: 'fault-detector', - loop: true, - options: { - loopIntervalMs: 1000, - ...options, - }, - optionsSpec: { - l1RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L1', - }, - l2RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L2', - }, - startOutputIndex: { - validator: validators.num, - default: -1, - desc: 'The L2 height to start from', - public: true, - }, - optimismPortalAddress: { - validator: validators.str, - default: ethers.constants.AddressZero, - desc: '[Custom OP Chains] Deployed OptimismPortal contract address. Used to retrieve necessary info for output verification ', - public: true, - }, - }, - metricsSpec: { - highestOutputIndex: { - type: Gauge, - desc: 'Highest output indices (checked and known)', - labels: ['type'], - }, - isCurrentlyMismatched: { - type: Gauge, - desc: '0 if state is ok, 1 if state is mismatched', - }, - nodeConnectionFailures: { - type: Gauge, - desc: 'Number of times node connection has failed', - labels: ['layer', 'section'], - }, - }, - }) - } - - /** - * Provides the required set of addresses used by the fault detector. For recognized op-chains, this - * will fallback to the pre-defined set of addresses from options, otherwise aborting if unset. - * - * Required Contracts - * - OptimismPortal (used to also fetch L2OutputOracle address variable). This is the preferred address - * since in early versions of bedrock, OptimismPortal holds the FINALIZATION_WINDOW variable instead of L2OutputOracle. - * The retrieved L2OutputOracle address from OptimismPortal is used to query for output roots. - * - * @param l2ChainId op chain id - * @returns OEL1ContractsLike set of L1 contracts with only the required addresses set - */ - async getOEL1Contracts(l2ChainId: number): Promise { - // CrossChainMessenger requires all address to be defined. Default to `AddressZero` to ignore unused contracts - let contracts: OEL1ContractsLike = { - OptimismPortal: ethers.constants.AddressZero, - L2OutputOracle: ethers.constants.AddressZero, - // Unused contracts - AddressManager: ethers.constants.AddressZero, - BondManager: ethers.constants.AddressZero, - CanonicalTransactionChain: ethers.constants.AddressZero, - L1CrossDomainMessenger: ethers.constants.AddressZero, - L1StandardBridge: ethers.constants.AddressZero, - StateCommitmentChain: ethers.constants.AddressZero, - } - - const knownChainId = L2ChainID[l2ChainId] !== undefined - if (knownChainId) { - this.logger.info(`Recognized L2 chain id ${L2ChainID[l2ChainId]}`) - - // fallback to the predefined defaults for this chain id - contracts = CONTRACT_ADDRESSES[l2ChainId].l1 - } - - this.logger.info('checking contract address options...') - const portalAddress = this.options.optimismPortalAddress - if (!knownChainId && portalAddress === ethers.constants.AddressZero) { - this.logger.error('OptimismPortal contract unspecified') - throw new Error( - '--optimismportalcontractaddress needs to set for custom op chains' - ) - } - - if (portalAddress !== ethers.constants.AddressZero) { - this.logger.info('set OptimismPortal contract override') - contracts.OptimismPortal = portalAddress - - this.logger.info('fetching L2OutputOracle contract from OptimismPortal') - const portalContract = getOEContract('OptimismPortal', l2ChainId, { - address: portalAddress, - signerOrProvider: this.options.l1RpcProvider, - }) - contracts.L2OutputOracle = await portalContract.l2Oracle() - } - - // ... for a known chain ids without an override, the L2OutputOracle will already - // be set via the hardcoded default - return contracts - } - - async init(): Promise { - // Connect to L1. - await waitForProvider(this.options.l1RpcProvider, { - logger: this.logger, - name: 'L1', - }) - - // Connect to L2. - await waitForProvider(this.options.l2RpcProvider, { - logger: this.logger, - name: 'L2', - }) - - const l1ChainId = await getChainId(this.options.l1RpcProvider) - const l2ChainId = await getChainId(this.options.l2RpcProvider) - this.state.messenger = new CrossChainMessenger({ - l1SignerOrProvider: this.options.l1RpcProvider, - l2SignerOrProvider: this.options.l2RpcProvider, - l1ChainId, - l2ChainId, - bedrock: true, - contracts: { l1: await this.getOEL1Contracts(l2ChainId) }, - }) - - // Not diverged by default. - this.state.diverged = false - - // We use this a lot, a bit cleaner to pull out to the top level of the state object. - this.state.faultProofWindow = - await this.state.messenger.getChallengePeriodSeconds() - this.logger.info( - `fault proof window is ${this.state.faultProofWindow} seconds` - ) - - this.state.outputOracle = this.state.messenger.contracts.l1.L2OutputOracle - - // Figure out where to start syncing from. - if (this.options.startOutputIndex === -1) { - this.logger.info('finding appropriate starting unfinalized output') - const firstUnfinalized = await findFirstUnfinalizedOutputIndex( - this.state.outputOracle, - this.state.faultProofWindow, - this.logger - ) - - // We may not have an unfinalized outputs in the case where no outputs have been submitted - // for the entire duration of the FAULTPROOFWINDOW. We generally do not expect this to happen on mainnet, - // but it happens often on testnets because the FAULTPROOFWINDOW is very short. - if (firstUnfinalized === undefined) { - this.logger.info( - 'no unfinalized outputes found. skipping all outputes.' - ) - const totalOutputes = await this.state.outputOracle.nextOutputIndex() - this.state.currentOutputIndex = totalOutputes.toNumber() - 1 - } else { - this.state.currentOutputIndex = firstUnfinalized - } - } else { - this.state.currentOutputIndex = this.options.startOutputIndex - } - - this.logger.info('starting output', { - outputIndex: this.state.currentOutputIndex, - }) - - // Set the initial metrics. - this.metrics.isCurrentlyMismatched.set(0) - } - - async routes(router: ExpressRouter): Promise { - router.get('/status', async (req, res) => { - return res.status(200).json({ - ok: !this.state.diverged, - }) - }) - } - - async main(): Promise { - const startMs = Date.now() - - let latestOutputIndex: number - try { - const totalOutputes = await this.state.outputOracle.nextOutputIndex() - latestOutputIndex = totalOutputes.toNumber() - 1 - } catch (err) { - this.logger.error('failed to query total # of outputes', { - error: err, - node: 'l1', - section: 'nextOutputIndex', - }) - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'nextOutputIndex', - }) - await sleep(15000) - return - } - - if (this.state.currentOutputIndex > latestOutputIndex) { - this.logger.info('output index is ahead of the oracle. waiting...', { - outputIndex: this.state.currentOutputIndex, - latestOutputIndex, - }) - await sleep(15000) - return - } - - this.metrics.highestOutputIndex.set({ type: 'known' }, latestOutputIndex) - this.logger.info('checking output', { - outputIndex: this.state.currentOutputIndex, - latestOutputIndex, - }) - - let outputData: BedrockOutputData - try { - outputData = await findOutputForIndex( - this.state.outputOracle, - this.state.currentOutputIndex, - this.logger - ) - } catch (err) { - this.logger.error('failed to fetch output associated with output', { - error: err, - node: 'l1', - section: 'findOutputForIndex', - outputIndex: this.state.currentOutputIndex, - }) - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'findOutputForIndex', - }) - await sleep(15000) - return - } - - let latestBlock: number - try { - latestBlock = await this.options.l2RpcProvider.getBlockNumber() - } catch (err) { - this.logger.error('failed to query L2 block height', { - error: err, - node: 'l2', - section: 'getBlockNumber', - }) - this.metrics.nodeConnectionFailures.inc({ - layer: 'l2', - section: 'getBlockNumber', - }) - await sleep(15000) - return - } - - const outputBlockNumber = outputData.l2BlockNumber - if (latestBlock < outputBlockNumber) { - this.logger.info('L2 node is behind, waiting for sync...', { - l2BlockHeight: latestBlock, - outputBlock: outputBlockNumber, - }) - return - } - - let outputBlock: any - try { - outputBlock = await ( - this.options.l2RpcProvider as ethers.providers.JsonRpcProvider - ).send('eth_getBlockByNumber', [toRpcHexString(outputBlockNumber), false]) - } catch (err) { - this.logger.error('failed to fetch output block', { - error: err, - node: 'l2', - section: 'getBlock', - block: outputBlockNumber, - }) - this.metrics.nodeConnectionFailures.inc({ - layer: 'l2', - section: 'getBlock', - }) - await sleep(15000) - return - } - - let messagePasserProofResponse: any - try { - messagePasserProofResponse = await ( - this.options.l2RpcProvider as ethers.providers.JsonRpcProvider - ).send('eth_getProof', [ - this.state.messenger.contracts.l2.BedrockMessagePasser.address, - [], - toRpcHexString(outputBlockNumber), - ]) - } catch (err) { - this.logger.error('failed to fetch message passer proof', { - error: err, - node: 'l2', - section: 'getProof', - block: outputBlockNumber, - }) - this.metrics.nodeConnectionFailures.inc({ - layer: 'l2', - section: 'getProof', - }) - await sleep(15000) - return - } - - const outputRoot = ethers.utils.solidityKeccak256( - ['uint256', 'bytes32', 'bytes32', 'bytes32'], - [ - 0, - outputBlock.stateRoot, - messagePasserProofResponse.storageHash, - outputBlock.hash, - ] - ) - - if (outputRoot !== outputData.outputRoot) { - this.state.diverged = true - this.metrics.isCurrentlyMismatched.set(1) - this.logger.error('state root mismatch', { - blockNumber: outputBlock.number, - expectedStateRoot: outputData.outputRoot, - actualStateRoot: outputRoot, - finalizationTime: dateformat( - new Date( - (ethers.BigNumber.from(outputBlock.timestamp).toNumber() + - this.state.faultProofWindow) * - 1000 - ), - 'mmmm dS, yyyy, h:MM:ss TT' - ), - }) - return - } - - const elapsedMs = Date.now() - startMs - - // Mark the current output index as checked - this.logger.info('checked output ok', { - outputIndex: this.state.currentOutputIndex, - timeMs: elapsedMs, - }) - this.metrics.highestOutputIndex.set( - { type: 'checked' }, - this.state.currentOutputIndex - ) - - // If we got through the above without throwing an error, we should be - // fine to reset and move onto the next output - this.state.diverged = false - this.state.currentOutputIndex++ - this.metrics.isCurrentlyMismatched.set(0) - } -} - -if (require.main === module) { - config() - const service = new FaultDetector() - service.run() -} diff --git a/packages/chain-mon/src/faultproof-wd-mon/constants.ts b/packages/chain-mon/src/faultproof-wd-mon/constants.ts deleted file mode 100644 index 0021c0de2606..000000000000 --- a/packages/chain-mon/src/faultproof-wd-mon/constants.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { L2ChainID } from '@eth-optimism/sdk' - -// TODO: Consider moving to `@eth-optimism/constants` and generating from superchain registry. -// @see https://github.com/ethereum-optimism/optimism/pull/9041 - -/** - * Mapping of L2ChainIDs to the L1 block numbers where the wd-mon service should start looking for - * withdrawals by default. L1 block numbers here are based on the block number in which the - * OptimismPortal proxy contract was deployed to L1. - */ -export const DEFAULT_STARTING_BLOCK_NUMBERS: { - [ChainID in L2ChainID]?: number -} = { - [L2ChainID.OPTIMISM]: 17365802 as const, - [L2ChainID.OPTIMISM_GOERLI]: 8299684 as const, - [L2ChainID.OPTIMISM_SEPOLIA]: 4071248 as const, - [L2ChainID.BASE_MAINNET]: 17482143 as const, - [L2ChainID.BASE_GOERLI]: 8411116 as const, - [L2ChainID.BASE_SEPOLIA]: 4370901 as const, - [L2ChainID.ZORA_MAINNET]: 17473938 as const, -} diff --git a/packages/chain-mon/src/faultproof-wd-mon/service.ts b/packages/chain-mon/src/faultproof-wd-mon/service.ts deleted file mode 100644 index 92e96e9a2e3d..000000000000 --- a/packages/chain-mon/src/faultproof-wd-mon/service.ts +++ /dev/null @@ -1,663 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - ExpressRouter, - Gauge, - validators, - waitForProvider, -} from '@eth-optimism/common-ts' -import { - getOEContract, - DEFAULT_L2_CONTRACT_ADDRESSES, - makeStateTrieProof, - toJsonRpcProvider, -} from '@eth-optimism/sdk' -import { getChainId, sleep, toRpcHexString } from '@eth-optimism/core-utils' -import { Provider } from '@ethersproject/abstract-provider' -import { ethers } from 'ethers' -import dateformat from 'dateformat' - -import { version } from '../../package.json' -import { DEFAULT_STARTING_BLOCK_NUMBERS } from './constants' - -type Options = { - l1RpcProvider: Provider - l2RpcProvider: Provider - optimismPortalAddress: string - l2ToL1MessagePasserAddress: string - startBlockNumber: number - eventBlockRange: number - sleepTimeMs: number -} - -type Metrics = { - highestCheckedBlockNumber: Gauge - highestKnownBlockNumber: Gauge - highestCheckedBlockTimestamp: Gauge - highestKnownBlockTimestamp: Gauge - withdrawalsValidated: Gauge - invalidProposalWithdrawals: Gauge - invalidProofWithdrawals: Gauge - isDetectingForgeries: Gauge - nodeConnectionFailures: Gauge -} - -type State = { - portal: ethers.Contract - messenger: ethers.Contract - highestUncheckedBlockNumber: number - faultProofWindow: number - forgeryDetected: boolean - invalidProposalWithdrawals: Array<{ - withdrawalHash: string - senderAddress: string - disputeGame: ethers.Contract - event: ethers.Event - }> - invalidProofWithdrawals: Array<{ - withdrawalHash: string - senderAddress: string - disputeGame: ethers.Contract - event: ethers.Event - }> -} - -enum GameStatus { - // The game is currently in progress, and has not been resolved. - IN_PROGRESS, - // The game has concluded, and the `rootClaim` was challenged successfully. - CHALLENGER_WINS, - // The game has concluded, and the `rootClaim` could not be contested. - DEFENDER_WINS, -} - -export class FaultProofWithdrawalMonitor extends BaseServiceV2< - Options, - Metrics, - State -> { - /** - * Contract objects attached to their respective providers and addresses. - */ - public l2ChainId: number - - constructor(options?: Partial) { - super({ - version, - name: 'two-step-monitor', - loop: true, - options: { - loopIntervalMs: 1000, - ...options, - }, - optionsSpec: { - l1RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L1', - }, - l2RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L2', - }, - optimismPortalAddress: { - validator: validators.address, - default: null, - desc: 'Address of the OptimismPortal proxy contract on L1', - public: true, - }, - l2ToL1MessagePasserAddress: { - validator: validators.address, - default: DEFAULT_L2_CONTRACT_ADDRESSES.BedrockMessagePasser as string, - desc: 'Address of the L2ToL1MessagePasser contract on L2', - public: true, - }, - startBlockNumber: { - validator: validators.num, - default: -1, - desc: 'L1 block number to start checking from', - public: true, - }, - eventBlockRange: { - validator: validators.num, - default: 2000, - desc: 'Number of blocks to query for events over per loop', - public: true, - }, - sleepTimeMs: { - validator: validators.num, - default: 15000, - desc: 'Time in ms to sleep when waiting for a node', - public: true, - }, - }, - - metricsSpec: { - highestCheckedBlockNumber: { - type: Gauge, - desc: 'Highest L1 block number that we have searched.', - labels: ['type'], - }, - highestCheckedBlockTimestamp: { - type: Gauge, - desc: 'Timestamp of the highest L1 block number that we have searched.', - labels: ['type'], - }, - highestKnownBlockNumber: { - type: Gauge, - desc: 'Highest L1 block number that we have seen.', - labels: ['type'], - }, - highestKnownBlockTimestamp: { - type: Gauge, - desc: 'Timestamp of the highest L1 block number that we have seen.', - labels: ['type'], - }, - - invalidProposalWithdrawals: { - type: Gauge, - desc: 'Number of withdrawals against invalid proposals.', - labels: ['type'], - }, - invalidProofWithdrawals: { - type: Gauge, - desc: 'Number of withdrawals with invalid proofs.', - labels: ['type'], - }, - withdrawalsValidated: { - type: Gauge, - desc: 'Latest L1 Block (checked and known)', - labels: ['type'], - }, - isDetectingForgeries: { - type: Gauge, - desc: '0 if state is ok. 1 or more if forged withdrawals are detected.', - }, - nodeConnectionFailures: { - type: Gauge, - desc: 'Number of times node connection has failed', - labels: ['layer', 'section'], - }, - }, - }) - } - - async init(): Promise { - // Connect to L1. - await waitForProvider(this.options.l1RpcProvider, { - logger: this.logger, - name: 'L1', - }) - - // Connect to L2. - await waitForProvider(this.options.l2RpcProvider, { - logger: this.logger, - name: 'L2', - }) - - // Need L2 chain ID to resolve contract addresses. - const l2ChainId = await getChainId(this.options.l2RpcProvider) - this.l2ChainId = l2ChainId - - // Create the OptimismPortal contract instance. If the optimismPortal option is not provided - // then the SDK will attempt to resolve the address automatically based on the L2 chain ID. If - // the SDK isn't aware of the L2 chain ID then it will throw an error that makes it clear the - // user needs to provide this value explicitly. - this.state.portal = getOEContract('OptimismPortal2', l2ChainId, { - signerOrProvider: this.options.l1RpcProvider, - address: this.options.optimismPortalAddress, - }) - - // Create the L2ToL1MessagePasser contract instance. If the l2ToL1MessagePasser option is not - // provided then we'll use the default address which typically should be correct. It's very - // unlikely that any user would change this address so this should work in 99% of cases. If we - // really wanted to be extra safe we could do some sanity checks to make sure the contract has - // the interface we need but doesn't seem important for now. - this.state.messenger = getOEContract('L2ToL1MessagePasser', l2ChainId, { - signerOrProvider: this.options.l2RpcProvider, - address: this.options.l2ToL1MessagePasserAddress, - }) - - // Previous versions of wd-mon would try to pick the starting block number automatically but - // this had the possibility of missing certain withdrawals if the service was restarted at the - // wrong time. Given the added complexity of finding a starting point automatically after FPAC, - // it's much easier to simply start a fixed block number than trying to do something fancy. Use - // the default configured in this service or use zero if no default is defined. - this.state.highestUncheckedBlockNumber = this.options.startBlockNumber - if (this.options.startBlockNumber === -1) { - this.state.highestUncheckedBlockNumber = - DEFAULT_STARTING_BLOCK_NUMBERS[l2ChainId] || 0 - } - this.logger.info( - `initialized starting at block number ${this.state.highestUncheckedBlockNumber}` - ) - - //make sure the highestUncheckedBlockNumber is not higher than the latest block number on chain - const latestL1BlockNumber = - await this.options.l1RpcProvider.getBlockNumber() - - this.state.highestUncheckedBlockNumber = Math.min( - this.state.highestUncheckedBlockNumber, - latestL1BlockNumber - ) - - this.logger.info( - `starting at block number ${this.state.highestUncheckedBlockNumber}` - ) - - // Default state is that forgeries have not been detected. - this.state.forgeryDetected = false - this.state.invalidProposalWithdrawals = [] - this.state.invalidProofWithdrawals = [] - } - - // K8s healthcheck - async routes(router: ExpressRouter): Promise { - router.get('/healthz', async (req, res) => { - return res.status(200).json({ - ok: !this.state.forgeryDetected, - }) - }) - } - - async main(): Promise { - this.metrics.isDetectingForgeries.set(Number(this.state.forgeryDetected)) - this.metrics.invalidProposalWithdrawals.set( - this.state.invalidProposalWithdrawals.length - ) - this.metrics.invalidProofWithdrawals.set( - this.state.invalidProofWithdrawals.length - ) - - for ( - let i = this.state.invalidProposalWithdrawals.length - 1; - i >= 0; - i-- - ) { - const disputeGameData = this.state.invalidProposalWithdrawals[i] - const disputeGame = disputeGameData.disputeGame - const disputeGameAddress = disputeGame.address - const isGameBlacklisted = - this.state.portal.disputeGameBlacklist(disputeGameAddress) - const event = disputeGameData.event - const block = await event.getBlock() - const ts = - dateformat( - new Date(block.timestamp * 1000), - 'mmmm dS, yyyy, h:MM:ss TT', - true - ) + ' UTC' - - if (isGameBlacklisted) { - this.state.invalidProposalWithdrawals.splice(i, 1) - } else { - const status = await disputeGame.status() - if (status === GameStatus.CHALLENGER_WINS) { - this.state.invalidProposalWithdrawals.splice(i, 1) - this.logger.info( - `withdrawalHash not seen on L2 - game correctly resolved`, - { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - blockNumber: block.number, - transaction: event.transactionHash, - } - ) - } else if (status === GameStatus.DEFENDER_WINS) { - this.logger.error( - `withdrawalHash not seen on L2 - forgery detected`, - { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - blockNumber: block.number, - transaction: event.transactionHash, - } - ) - this.state.forgeryDetected = true - this.metrics.isDetectingForgeries.set( - Number(this.state.forgeryDetected) - ) - } else { - this.logger.warn( - `withdrawalHash not seen on L2 - game still IN_PROGRESS`, - { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - blockNumber: block.number, - transaction: event.transactionHash, - } - ) - } - } - } - let latestL1BlockNumber: number - let latestL1Block: ethers.providers.Block - let highestUncheckedBlock: ethers.providers.Block - try { - // Get the latest L1 block number. - latestL1BlockNumber = await this.options.l1RpcProvider.getBlockNumber() - latestL1Block = await this.options.l1RpcProvider.getBlock( - latestL1BlockNumber - ) - highestUncheckedBlock = await this.options.l1RpcProvider.getBlock( - this.state.highestUncheckedBlockNumber - ) - } catch (err) { - // Log the issue so we can debug it. - this.logger.error(`got error when connecting to node`, { - error: err, - node: 'l1', - section: 'getBlockNumber', - }) - - // Increment the metric so we can detect the issue. - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'getBlockNumber', - }) - - // Sleep for a little to give intermittent errors a chance to recover. - return sleep(this.options.sleepTimeMs) - } - - // Update highest block number metrics so we can keep track of how the service is doing. - this.metrics.highestCheckedBlockNumber.set( - { type: 'L1' }, - this.state.highestUncheckedBlockNumber - ) - this.metrics.highestKnownBlockNumber.set( - { type: 'L1' }, - latestL1BlockNumber - ) - this.metrics.highestCheckedBlockTimestamp.set( - { type: 'L1' }, - highestUncheckedBlock.timestamp - ) - this.metrics.highestKnownBlockTimestamp.set( - { type: 'L1' }, - latestL1Block.timestamp - ) - - // Check if the RPC provider is behind us for some reason. Can happen occasionally, - // particularly if connected to an RPC provider that load balances over multiple nodes that - // might not be perfectly in sync. - if (latestL1BlockNumber <= this.state.highestUncheckedBlockNumber) { - // Sleep for a little to give the RPC a chance to catch up. - return sleep(this.options.sleepTimeMs) - } - - // Generally better to use a relatively small block range because it means this service can be - // used alongside many different types of L1 nodes. For instance, Geth will typically only - // support a block range of 2000 blocks out of the box. - const toBlockNumber = Math.min( - this.state.highestUncheckedBlockNumber + this.options.eventBlockRange, - latestL1BlockNumber - ) - - // Useful to log this stuff just in case we get stuck or something. - this.logger.info(`checking recent blocks`, { - fromBlockNumber: this.state.highestUncheckedBlockNumber, - toBlockNumber, - latestL1BlockNumber, - percentageDone: - Math.floor((toBlockNumber / latestL1BlockNumber) * 100) + '% done', - }) - - // Query for WithdrawalProven events within the specified block range. - let events: ethers.Event[] - try { - events = await this.state.portal.queryFilter( - this.state.portal.filters.WithdrawalProven(), - this.state.highestUncheckedBlockNumber, - toBlockNumber - ) - } catch (err) { - // Log the issue so we can debug it. - this.logger.error(`got error when connecting to node`, { - error: err, - node: 'l1', - section: 'querying for WithdrawalProven events', - }) - - // Increment the metric so we can detect the issue. - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'querying for WithdrawalProven events', - }) - - // Sleep for a little to give intermittent errors a chance to recover. - return sleep(this.options.sleepTimeMs) - } - // Go over all the events and check if the withdrawal hash actually exists on L2. - for (const event of events) { - // If this loop throws for whatever reason then the same event may be dropped into - // invalidProposalWithdrawals or invalidProofWithdrawals more than once. This can lead to - // inflated metrics. However, it's worth noting that inflated metrics are preferred over not - // incrementing the metrics at all. Documenting this behavior for future reference. - - // Grab and format the timestamp for logging purposes. - const block = await event.getBlock() - const ts = `${dateformat( - new Date(block.timestamp * 1000), - 'mmmm dS, yyyy, h:MM:ss TT', - true - )} UTC` - - // Could consider using multicall here but this is efficient enough for now. - const hash = event.args.withdrawalHash - const disputeGamesData = await this.getWithdrawalDisputeGames(event) - for (const disputeGameData of disputeGamesData) { - const disputeGame = disputeGameData.disputeGame - const rootClaim = await disputeGame.rootClaim() - const l2BlockNumber = await disputeGame.l2BlockNumber() - const isValidRoot = await this.isValidOutputRoot( - rootClaim, - l2BlockNumber - ) - if (isValidRoot) { - // Check if the withdrawal exists on L2. - const exists = await this.state.messenger.sentMessages(hash) - // Hopefully the withdrawal exists! - if (exists) { - // Unlike below we don't grab the timestamp here because it adds an unnecessary request. - this.logger.info(`valid withdrawal`, { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - blockNumber: block.number, - transaction: event.transactionHash, - }) - - // Bump the withdrawals metric so we can keep track. - this.metrics.withdrawalsValidated.inc() - } else { - this.state.invalidProofWithdrawals.push(disputeGameData) - - // Uh oh! - this.logger.error( - `withdrawalHash not seen on L2 - forgery detected`, - { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - blockNumber: block.number, - transaction: event.transactionHash, - } - ) - - // Change to forgery state. - this.state.forgeryDetected = true - this.metrics.isDetectingForgeries.set( - Number(this.state.forgeryDetected) - ) - } - } else { - this.state.invalidProposalWithdrawals.push(disputeGameData) - this.logger.warn(`invalid proposal`, { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - disputeGameAddress: disputeGame.address, - }) - } - } - } - - // Increment the highest unchecked block number for the next loop. - this.state.highestUncheckedBlockNumber = toBlockNumber - } - - /** - * Retrieves the dispute games data associated with a withdrawal hash associated in an event. - * - * @param event The event containing the withdrawal hash. - * @returns An array of objects containing the withdrawal hash, sender address, and dispute game address. - */ - async getWithdrawalDisputeGames(event_in: ethers.Event): Promise< - Array<{ - withdrawalHash: string - senderAddress: string - disputeGame: ethers.Contract - event: ethers.Event - }> - > { - const withdrawalHash = event_in.args.withdrawalHash - const disputeGameMap: Array<{ - withdrawalHash: string - senderAddress: string - disputeGame: ethers.Contract - event: ethers.Event - }> = [] - - const numProofSubmitter = await this.state.portal.numProofSubmitters( - withdrawalHash - ) - - // iterate for numProofSubmitter - const proofSubmitterAddresses = await Promise.all( - Array.from({ length: numProofSubmitter.toNumber() }, (_, i) => - this.state.portal.proofSubmitters(withdrawalHash, i) - ) - ) - - // Iterate for proofSubmitterAddresses and query provenWithdrawals to get the disputeGameProxy for each proofSubmitter - // Note: In the future, if rate limiting becomes an issue, consider breaking up this loop into smaller chunks. - await Promise.all( - proofSubmitterAddresses.map(async (proofSubmitter) => { - const provenWithdrawals_ = await this.state.portal.provenWithdrawals( - withdrawalHash, - proofSubmitter - ) - const disputeGame_ = await this.getDisputeGameFromAddress( - provenWithdrawals_['disputeGameProxy'] - ) - disputeGameMap.push({ - withdrawalHash, - senderAddress: proofSubmitter, - disputeGame: disputeGame_, - event: event_in, - }) - }) - ) - return disputeGameMap - } - - /** - * Retrieves the FaultDisputeGame contract instance given the dispute game proxy address. - * - * @param disputeGameProxyAddress The address of the dispute game proxy contract. - * @returns The FaultDisputeGame contract instance. - */ - async getDisputeGameFromAddress( - disputeGameProxyAddress: string - ): Promise { - // Create the FaultDisputeGame contract instance using the provided dispute game proxy address. - const FaultDisputeGame = getOEContract('FaultDisputeGame', this.l2ChainId, { - signerOrProvider: this.options.l1RpcProvider, - address: disputeGameProxyAddress, - }) - - return FaultDisputeGame - } - - /** - * A private cache to store the validity of output roots. - * The cache is implemented as a Map, where the key is a combination of the output root and the L2 block number, - * and the value is a boolean indicating if the output root is valid. - */ - private outputRootCache: Map = new Map() - - /** - * The maximum size of the output root cache. - * Once the cache reaches this size, the oldest entries will be automatically evicted to make room for new entries. - */ - private MAX_CACHE_SIZE = 100 - - /** - * Checks if the provided output root is valid for the given L2 block number. - * Caches the result to improve performance. - * - * @param outputRoot The output root to validate. - * @param l2BlockNumber The L2 block number. - * @returns A promise that resolves to a boolean indicating if the output root is valid. - */ - public async isValidOutputRoot( - outputRoot: string, - l2BlockNumber: number - ): Promise { - const cacheKey = `${outputRoot}-${l2BlockNumber}` - const cachedValue = this.outputRootCache.get(cacheKey) - if (cachedValue !== undefined) { - return cachedValue - } - - try { - // Make sure this is a JSON RPC provider. - const provider = toJsonRpcProvider(this.options.l2RpcProvider) - - // Grab the block and storage proof at the same time. - const [block, proof] = await Promise.all([ - provider.send('eth_getBlockByNumber', [ - toRpcHexString(l2BlockNumber), - false, - ]), - makeStateTrieProof( - provider, - l2BlockNumber, - this.state.messenger.address, - ethers.constants.HashZero - ), - ]) - - // Compute the output. - const output = ethers.utils.solidityKeccak256( - ['bytes32', 'bytes32', 'bytes32', 'bytes32'], - [ - ethers.constants.HashZero, - block.stateRoot, - proof.storageRoot, - block.hash, - ] - ) - - // If the output matches the proposal then we're good. - const valid = output === outputRoot - this.outputRootCache.set(cacheKey, valid) - - if (this.outputRootCache.size > this.MAX_CACHE_SIZE) { - const oldestKey = this.outputRootCache.keys().next().value - this.outputRootCache.delete(oldestKey) - } - return valid - } catch (err) { - // Assume the game is invalid but don't add it to the cache just in case we had a temp error. - return false - } - } -} - -if (require.main === module) { - const service = new FaultProofWithdrawalMonitor() - service.run() -} diff --git a/packages/chain-mon/src/index.ts b/packages/chain-mon/src/index.ts deleted file mode 100644 index a322a2e0019f..000000000000 --- a/packages/chain-mon/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from '../internal/balance-mon/service' -export * from './fault-mon/index' -export * from '../internal/multisig-mon/service' -export * from './wd-mon/service' -export * from './faultproof-wd-mon/service' -export * from '../contrib/wallet-mon/service' -export * from '../contrib/initialized-upgraded-mon/service' diff --git a/packages/chain-mon/src/wd-mon/constants.ts b/packages/chain-mon/src/wd-mon/constants.ts deleted file mode 100644 index 0021c0de2606..000000000000 --- a/packages/chain-mon/src/wd-mon/constants.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { L2ChainID } from '@eth-optimism/sdk' - -// TODO: Consider moving to `@eth-optimism/constants` and generating from superchain registry. -// @see https://github.com/ethereum-optimism/optimism/pull/9041 - -/** - * Mapping of L2ChainIDs to the L1 block numbers where the wd-mon service should start looking for - * withdrawals by default. L1 block numbers here are based on the block number in which the - * OptimismPortal proxy contract was deployed to L1. - */ -export const DEFAULT_STARTING_BLOCK_NUMBERS: { - [ChainID in L2ChainID]?: number -} = { - [L2ChainID.OPTIMISM]: 17365802 as const, - [L2ChainID.OPTIMISM_GOERLI]: 8299684 as const, - [L2ChainID.OPTIMISM_SEPOLIA]: 4071248 as const, - [L2ChainID.BASE_MAINNET]: 17482143 as const, - [L2ChainID.BASE_GOERLI]: 8411116 as const, - [L2ChainID.BASE_SEPOLIA]: 4370901 as const, - [L2ChainID.ZORA_MAINNET]: 17473938 as const, -} diff --git a/packages/chain-mon/src/wd-mon/service.ts b/packages/chain-mon/src/wd-mon/service.ts deleted file mode 100644 index 2a71ca222bc6..000000000000 --- a/packages/chain-mon/src/wd-mon/service.ts +++ /dev/null @@ -1,330 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - ExpressRouter, - Gauge, - validators, - waitForProvider, -} from '@eth-optimism/common-ts' -import { getOEContract, DEFAULT_L2_CONTRACT_ADDRESSES } from '@eth-optimism/sdk' -import { getChainId, sleep } from '@eth-optimism/core-utils' -import { Provider } from '@ethersproject/abstract-provider' -import { ethers } from 'ethers' -import dateformat from 'dateformat' - -import { version } from '../../package.json' -import { DEFAULT_STARTING_BLOCK_NUMBERS } from './constants' - -type Options = { - l1RpcProvider: Provider - l2RpcProvider: Provider - optimismPortalAddress: string - l2ToL1MessagePasserAddress: string - startBlockNumber: number - eventBlockRange: number - sleepTimeMs: number -} - -type Metrics = { - highestBlockNumber: Gauge - withdrawalsValidated: Gauge - isDetectingForgeries: Gauge - nodeConnectionFailures: Gauge - detectedForgeries: Gauge -} - -type State = { - portal: ethers.Contract - messenger: ethers.Contract - highestUncheckedBlockNumber: number - faultProofWindow: number - forgeryDetected: boolean -} - -export class WithdrawalMonitor extends BaseServiceV2 { - constructor(options?: Partial) { - super({ - version, - name: 'two-step-monitor', - loop: true, - options: { - loopIntervalMs: 1000, - ...options, - }, - optionsSpec: { - l1RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L1', - }, - l2RpcProvider: { - validator: validators.provider, - desc: 'Provider for interacting with L2', - }, - optimismPortalAddress: { - validator: validators.address, - default: null, - desc: 'Address of the OptimismPortal proxy contract on L1', - public: true, - }, - l2ToL1MessagePasserAddress: { - validator: validators.address, - default: DEFAULT_L2_CONTRACT_ADDRESSES.BedrockMessagePasser as string, - desc: 'Address of the L2ToL1MessagePasser contract on L2', - public: true, - }, - startBlockNumber: { - validator: validators.num, - default: -1, - desc: 'L1 block number to start checking from', - public: true, - }, - eventBlockRange: { - validator: validators.num, - default: 2000, - desc: 'Number of blocks to query for events over per loop', - public: true, - }, - sleepTimeMs: { - validator: validators.num, - default: 15000, - desc: 'Time in ms to sleep when waiting for a node', - public: true, - }, - }, - metricsSpec: { - highestBlockNumber: { - type: Gauge, - desc: 'Highest block number (checked and known)', - labels: ['type'], - }, - withdrawalsValidated: { - type: Gauge, - desc: 'Latest L1 Block (checked and known)', - labels: ['type'], - }, - isDetectingForgeries: { - type: Gauge, - desc: '0 if state is ok. 1 or more if forged withdrawals are detected.', - }, - nodeConnectionFailures: { - type: Gauge, - desc: 'Number of times node connection has failed', - labels: ['layer', 'section'], - }, - detectedForgeries: { - type: Gauge, - desc: 'detected forged withdrawals', - labels: ['withdrawalHash', 'provenAt', 'blockNumber', 'transaction'], - }, - }, - }) - } - - async init(): Promise { - // Connect to L1. - await waitForProvider(this.options.l1RpcProvider, { - logger: this.logger, - name: 'L1', - }) - - // Connect to L2. - await waitForProvider(this.options.l2RpcProvider, { - logger: this.logger, - name: 'L2', - }) - - // Need L2 chain ID to resolve contract addresses. - const l2ChainId = await getChainId(this.options.l2RpcProvider) - - // Create the OptimismPortal contract instance. If the optimismPortal option is not provided - // then the SDK will attempt to resolve the address automatically based on the L2 chain ID. If - // the SDK isn't aware of the L2 chain ID then it will throw an error that makes it clear the - // user needs to provide this value explicitly. - this.state.portal = getOEContract('OptimismPortal', l2ChainId, { - signerOrProvider: this.options.l1RpcProvider, - address: this.options.optimismPortalAddress, - }) - - // Create the L2ToL1MessagePasser contract instance. If the l2ToL1MessagePasser option is not - // provided then we'll use the default address which typically should be correct. It's very - // unlikely that any user would change this address so this should work in 99% of cases. If we - // really wanted to be extra safe we could do some sanity checks to make sure the contract has - // the interface we need but doesn't seem important for now. - this.state.messenger = getOEContract('L2ToL1MessagePasser', l2ChainId, { - signerOrProvider: this.options.l2RpcProvider, - address: this.options.l2ToL1MessagePasserAddress, - }) - - // Previous versions of wd-mon would try to pick the starting block number automatically but - // this had the possibility of missing certain withdrawals if the service was restarted at the - // wrong time. Given the added complexity of finding a starting point automatically after FPAC, - // it's much easier to simply start a fixed block number than trying to do something fancy. Use - // the default configured in this service or use zero if no default is defined. - this.state.highestUncheckedBlockNumber = this.options.startBlockNumber - if (this.options.startBlockNumber === -1) { - this.state.highestUncheckedBlockNumber = - DEFAULT_STARTING_BLOCK_NUMBERS[l2ChainId] || 0 - } - - // Default state is that forgeries have not been detected. - this.state.forgeryDetected = false - } - - // K8s healthcheck - async routes(router: ExpressRouter): Promise { - router.get('/healthz', async (req, res) => { - return res.status(200).json({ - ok: !this.state.forgeryDetected, - }) - }) - } - - async main(): Promise { - // Get the latest L1 block number. - let latestL1BlockNumber: number - try { - latestL1BlockNumber = await this.options.l1RpcProvider.getBlockNumber() - } catch (err) { - // Log the issue so we can debug it. - this.logger.error(`got error when connecting to node`, { - error: err, - node: 'l1', - section: 'getBlockNumber', - }) - - // Increment the metric so we can detect the issue. - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'getBlockNumber', - }) - - // Sleep for a little to give intermittent errors a chance to recover. - return sleep(this.options.sleepTimeMs) - } - - // Update highest block number metrics so we can keep track of how the service is doing. - this.metrics.highestBlockNumber.set({ type: 'known' }, latestL1BlockNumber) - this.metrics.highestBlockNumber.set( - { type: 'checked' }, - this.state.highestUncheckedBlockNumber - ) - - // Check if the RPC provider is behind us for some reason. Can happen occasionally, - // particularly if connected to an RPC provider that load balances over multiple nodes that - // might not be perfectly in sync. - if (latestL1BlockNumber <= this.state.highestUncheckedBlockNumber) { - // Sleep for a little to give the RPC a chance to catch up. - return sleep(this.options.sleepTimeMs) - } - - // Generally better to use a relatively small block range because it means this service can be - // used alongside many different types of L1 nodes. For instance, Geth will typically only - // support a block range of 2000 blocks out of the box. - const toBlockNumber = Math.min( - this.state.highestUncheckedBlockNumber + this.options.eventBlockRange, - latestL1BlockNumber - ) - - // Useful to log this stuff just in case we get stuck or something. - this.logger.info(`checking recent blocks`, { - fromBlockNumber: this.state.highestUncheckedBlockNumber, - toBlockNumber, - latestL1BlockNumber, - percentageDone: - Math.floor((toBlockNumber / latestL1BlockNumber) * 100) + '% done', - }) - - // Query for WithdrawalProven events within the specified block range. - let events: ethers.Event[] - try { - events = await this.state.portal.queryFilter( - this.state.portal.filters.WithdrawalProven(), - this.state.highestUncheckedBlockNumber, - toBlockNumber - ) - } catch (err) { - // Log the issue so we can debug it. - this.logger.error(`got error when connecting to node`, { - error: err, - node: 'l1', - section: 'querying for WithdrawalProven events', - }) - - // Increment the metric so we can detect the issue. - this.metrics.nodeConnectionFailures.inc({ - layer: 'l1', - section: 'querying for WithdrawalProven events', - }) - - // Sleep for a little to give intermittent errors a chance to recover. - return sleep(this.options.sleepTimeMs) - } - - // Go over all the events and check if the withdrawal hash actually exists on L2. - for (const event of events) { - // Could consider using multicall here but this is efficient enough for now. - const hash = event.args.withdrawalHash - const exists = await this.state.messenger.sentMessages(hash) - - const block = await event.getBlock() - const ts = `${dateformat( - new Date(block.timestamp * 1000), - 'mmmm dS, yyyy, h:MM:ss TT', - true - )} UTC` - - // Hopefully the withdrawal exists! - if (exists) { - // Unlike below we don't grab the timestamp here because it adds an unnecessary request. - this.logger.info(`valid withdrawal`, { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - blockNumber: block.number, - transaction: event.transactionHash, - }) - - // Bump the withdrawals metric so we can keep track. - this.metrics.withdrawalsValidated.inc() - } else { - // Grab and format the timestamp so it's clear how much time is left. - - // Uh oh! - this.logger.error(`withdrawalHash not seen on L2`, { - withdrawalHash: event.args.withdrawalHash, - provenAt: - dateformat( - new Date(block.timestamp * 1000), - 'mmmm dS, yyyy, h:MM:ss TT', - true - ) + ' UTC', - blockNumber: block.number.toString(), - transaction: event.transactionHash, - }) - - // Change to forgery state. - this.state.forgeryDetected = true - this.metrics.isDetectingForgeries.set(1) - this.metrics.detectedForgeries.inc({ - withdrawalHash: hash, - provenAt: ts, - blockNumber: block.number.toString(), - transaction: event.transactionHash, - }) - } - } - - // Increment the highest unchecked block number for the next loop. - this.state.highestUncheckedBlockNumber = toBlockNumber - - // If we got through the above without throwing an error, we should be fine to reset. Only case - // where this is relevant is if something is detected as a forgery accidentally and the error - // doesn't happen again on the next loop. - this.state.forgeryDetected = false - this.metrics.isDetectingForgeries.set(0) - } -} - -if (require.main === module) { - const service = new WithdrawalMonitor() - service.run() -} diff --git a/packages/chain-mon/test/fault-mon/helpers.spec.ts b/packages/chain-mon/test/fault-mon/helpers.spec.ts deleted file mode 100644 index f62e484cece8..000000000000 --- a/packages/chain-mon/test/fault-mon/helpers.spec.ts +++ /dev/null @@ -1,247 +0,0 @@ -import hre from 'hardhat' -import '@nomiclabs/hardhat-ethers' -import { Contract, utils } from 'ethers' -import { toRpcHexString } from '@eth-optimism/core-utils' -import Artifact__L2OutputOracle from '@eth-optimism/contracts-bedrock/forge-artifacts/L2OutputOracle.sol/L2OutputOracle.json' -import Artifact__Proxy from '@eth-optimism/contracts-bedrock/forge-artifacts/Proxy.sol/Proxy.json' -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' - -import { expect } from './setup' -import { - findOutputForIndex, - findFirstUnfinalizedOutputIndex, -} from '../../src/fault-mon' - -describe('helpers', () => { - const deployConfig = { - l2OutputOracleSubmissionInterval: 6, - l2BlockTime: 2, - l2OutputOracleStartingBlockNumber: 0, - l2OutputOracleStartingTimestamp: 0, - l2OutputOracleProposer: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', - l2OutputOracleChallenger: '0x6925B8704Ff96DEe942623d6FB5e946EF5884b63', - // Can be any non-zero value, 1000 is fine. - finalizationPeriodSeconds: 1000, - } - - let signer: SignerWithAddress - before(async () => { - ;[signer] = await hre.ethers.getSigners() - }) - - let L2OutputOracle: Contract - let Proxy: Contract - beforeEach(async () => { - const Factory__Proxy = new hre.ethers.ContractFactory( - Artifact__Proxy.abi, - Artifact__Proxy.bytecode.object, - signer - ) - - Proxy = await Factory__Proxy.deploy(signer.address) - - const Factory__L2OutputOracle = new hre.ethers.ContractFactory( - Artifact__L2OutputOracle.abi, - Artifact__L2OutputOracle.bytecode.object, - signer - ) - - const L2OutputOracleImplementation = await Factory__L2OutputOracle.deploy() - - await Proxy.upgradeToAndCall( - L2OutputOracleImplementation.address, - L2OutputOracleImplementation.interface.encodeFunctionData('initialize', [ - deployConfig.l2OutputOracleSubmissionInterval, - deployConfig.l2BlockTime, - deployConfig.l2OutputOracleStartingBlockNumber, - deployConfig.l2OutputOracleStartingTimestamp, - deployConfig.l2OutputOracleProposer, - deployConfig.l2OutputOracleChallenger, - deployConfig.finalizationPeriodSeconds, - ]) - ) - - L2OutputOracle = new hre.ethers.Contract( - Proxy.address, - Artifact__L2OutputOracle.abi, - signer - ) - }) - - describe('findOutputForIndex', () => { - describe('when the output exists once', () => { - beforeEach(async () => { - const latestBlock = await hre.ethers.provider.getBlock('latest') - const params = { - _outputRoot: utils.formatBytes32String('testhash'), - _l2BlockNumber: - deployConfig.l2OutputOracleStartingBlockNumber + - deployConfig.l2OutputOracleSubmissionInterval, - _l1BlockHash: latestBlock.hash, - _l1BlockNumber: latestBlock.number, - } - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber, - params._l1BlockHash, - params._l1BlockNumber - ) - }) - - it('should return the output', async () => { - const output = await findOutputForIndex(L2OutputOracle, 0) - - expect(output.l2OutputIndex).to.equal(0) - }) - }) - - describe('when the output does not exist', () => { - it('should throw an error', async () => { - await expect( - findOutputForIndex(L2OutputOracle, 0) - ).to.eventually.be.rejectedWith('unable to find output for index') - }) - }) - }) - - describe('findFirstUnfinalizedIndex', () => { - describe('when the chain is more then FPW seconds old', () => { - beforeEach(async () => { - const latestBlock = await hre.ethers.provider.getBlock('latest') - const params = { - _l2BlockNumber: - deployConfig.l2OutputOracleStartingBlockNumber + - deployConfig.l2OutputOracleSubmissionInterval, - _l1BlockHash: latestBlock.hash, - _l1BlockNumber: latestBlock.number, - } - await L2OutputOracle.proposeL2Output( - utils.formatBytes32String('outputRoot1'), - params._l2BlockNumber, - params._l1BlockHash, - params._l1BlockNumber - ) - - // Simulate FPW passing - await hre.ethers.provider.send('evm_increaseTime', [ - toRpcHexString(deployConfig.finalizationPeriodSeconds * 2), - ]) - - await L2OutputOracle.proposeL2Output( - utils.formatBytes32String('outputRoot2'), - params._l2BlockNumber + deployConfig.l2OutputOracleSubmissionInterval, - params._l1BlockHash, - params._l1BlockNumber - ) - await L2OutputOracle.proposeL2Output( - utils.formatBytes32String('outputRoot3'), - params._l2BlockNumber + - deployConfig.l2OutputOracleSubmissionInterval * 2, - params._l1BlockHash, - params._l1BlockNumber - ) - }) - - it('should find the first batch older than the FPW', async () => { - const first = await findFirstUnfinalizedOutputIndex( - L2OutputOracle, - deployConfig.finalizationPeriodSeconds - ) - - expect(first).to.equal(1) - }) - }) - - describe('when the chain is less than FPW seconds old', () => { - beforeEach(async () => { - const latestBlock = await hre.ethers.provider.getBlock('latest') - const params = { - _outputRoot: utils.formatBytes32String('testhash'), - _l2BlockNumber: - deployConfig.l2OutputOracleStartingBlockNumber + - deployConfig.l2OutputOracleSubmissionInterval, - _l1BlockHash: latestBlock.hash, - _l1BlockNumber: latestBlock.number, - } - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber, - params._l1BlockHash, - params._l1BlockNumber - ) - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber + deployConfig.l2OutputOracleSubmissionInterval, - params._l1BlockHash, - params._l1BlockNumber - ) - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber + - deployConfig.l2OutputOracleSubmissionInterval * 2, - params._l1BlockHash, - params._l1BlockNumber - ) - }) - - it('should return zero', async () => { - const first = await findFirstUnfinalizedOutputIndex( - L2OutputOracle, - deployConfig.finalizationPeriodSeconds - ) - - expect(first).to.equal(0) - }) - }) - - describe('when no batches submitted for the entire FPW', () => { - beforeEach(async () => { - const latestBlock = await hre.ethers.provider.getBlock('latest') - const params = { - _outputRoot: utils.formatBytes32String('testhash'), - _l2BlockNumber: - deployConfig.l2OutputOracleStartingBlockNumber + - deployConfig.l2OutputOracleSubmissionInterval, - _l1BlockHash: latestBlock.hash, - _l1BlockNumber: latestBlock.number, - } - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber, - params._l1BlockHash, - params._l1BlockNumber - ) - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber + deployConfig.l2OutputOracleSubmissionInterval, - params._l1BlockHash, - params._l1BlockNumber - ) - await L2OutputOracle.proposeL2Output( - params._outputRoot, - params._l2BlockNumber + - deployConfig.l2OutputOracleSubmissionInterval * 2, - params._l1BlockHash, - params._l1BlockNumber - ) - - // Simulate FPW passing and no new batches - await hre.ethers.provider.send('evm_increaseTime', [ - toRpcHexString(deployConfig.finalizationPeriodSeconds * 2), - ]) - - // Mine a block to force timestamp to update - await hre.ethers.provider.send('hardhat_mine', ['0x1']) - }) - - it('should return undefined', async () => { - const first = await findFirstUnfinalizedOutputIndex( - L2OutputOracle, - deployConfig.finalizationPeriodSeconds - ) - - expect(first).to.equal(undefined) - }) - }) - }) -}) diff --git a/packages/chain-mon/test/fault-mon/setup.ts b/packages/chain-mon/test/fault-mon/setup.ts deleted file mode 100644 index c20ad0f59006..000000000000 --- a/packages/chain-mon/test/fault-mon/setup.ts +++ /dev/null @@ -1,10 +0,0 @@ -import chai = require('chai') -import chaiAsPromised from 'chai-as-promised' - -// Chai plugins go here. -chai.use(chaiAsPromised) - -const should = chai.should() -const expect = chai.expect - -export { should, expect } diff --git a/packages/chain-mon/tsconfig.json b/packages/chain-mon/tsconfig.json deleted file mode 100644 index 46e4d8fe12ca..000000000000 --- a/packages/chain-mon/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist", - "skipLibCheck": true, - "module": "commonjs", - "target": "es2017", - "sourceMap": true, - "esModuleInterop": true, - "composite": true, - "resolveJsonModule": true, - "declaration": true, - "noImplicitAny": false, - "removeComments": true, - "noLib": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "dist" - ], - "include": [ - "package.json", - "src/abi/IGnosisSafe.0.8.19.json", - "src/abi/OptimismPortal.json", - "src/**/*", - "contrib/**/*", - "internal/**/*" - ] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5481561a1b58..daeb9e3a3a6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,58 +84,6 @@ importers: specifier: ^5.5.4 version: 5.5.4 - packages/chain-mon: - dependencies: - '@eth-optimism/common-ts': - specifier: ^0.8.9 - version: 0.8.9(bufferutil@4.0.8)(utf-8-validate@5.0.7) - '@eth-optimism/contracts-bedrock': - specifier: workspace:* - version: link:../contracts-bedrock - '@eth-optimism/contracts-periphery': - specifier: 1.0.8 - version: 1.0.8 - '@eth-optimism/core-utils': - specifier: ^0.13.2 - version: 0.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - '@eth-optimism/sdk': - specifier: ^3.3.2 - version: 3.3.2(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) - '@types/dateformat': - specifier: ^5.0.0 - version: 5.0.0 - chai-as-promised: - specifier: ^7.1.1 - version: 7.1.1(chai@4.3.10) - dateformat: - specifier: ^4.5.1 - version: 4.5.1 - dotenv: - specifier: ^16.4.5 - version: 16.4.5 - ethers: - specifier: ^5.7.2 - version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - devDependencies: - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@nomiclabs/hardhat-ethers': - specifier: ^2.2.3 - version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.14.12)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.7)) - '@nomiclabs/hardhat-waffle': - specifier: ^2.0.6 - version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.14.12)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.7)))(@types/sinon-chai@3.2.5)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.5.4))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.14.12)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.7)) - hardhat: - specifier: ^2.20.1 - version: 2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.14.12)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.7) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.4.13)(@types/node@20.14.12)(typescript@5.5.4) - tsx: - specifier: ^4.16.2 - version: 4.16.2 - packages/contracts-bedrock: devDependencies: '@typescript-eslint/eslint-plugin':